3
\$\begingroup\$

Question link

You are given an integer array nums and you have to return a new counts array. The counts array has the property where counts[i] is the number of smaller elements to the right of nums[i].

Solution is done using customized BST where count stores the total number of elements lesser than current element found from left to right.

class Solution:
 def countSmaller(self, nums):
 class Node:
 def __init__(self, val):
 self.val = val
 self.left = None
 self.right = None
 self.count = 0
 def bst_insert(root, val, result, count):
 if not root:
 root = Node(val)
 root.left = None
 root.right = None
 result.append(count)
 return root
 if val > root.val:
 root.right = bst_insert(root.right, val, result, root.count + 1 + count)
 else:
 root.count += 1
 root.left = bst_insert(root.left, val, result, count)
 return root
 root = None
 result = []
 for num in nums[::-1]:
 if not root:
 root = Node(num)
 result.append(0)
 else:
 bst_insert(root, num, result, 0)
 return result[::-1]
Eran
3311 gold badge4 silver badges14 bronze badges
asked Dec 17, 2017 at 8:19
\$\endgroup\$
2
  • \$\begingroup\$ What is a "BST"? \$\endgroup\$ Commented Dec 17, 2017 at 13:55
  • \$\begingroup\$ @benrudgers Binary Search Tree. \$\endgroup\$ Commented Dec 17, 2017 at 21:09

1 Answer 1

1
\$\begingroup\$

The first advice is to remove the class. In python you should use classes when it makes sense to do so, but you don't need to.

Next, your bst_insert has redundant code. root.left = None and root.right = None are already done in your constructor, so you don't need to duplicate them.

The last piece of advice is to use reversed(nums) instead of num[::-1] as the former does not make a copy, which should be faster and use less memory.

Other than that this looks pretty good.

answered Dec 17, 2017 at 8:33
\$\endgroup\$
3
  • \$\begingroup\$ If i remove class then i will get compilation error. Can you modify this ideone.com/9dHWDS and let me know what you mean? \$\endgroup\$ Commented Dec 17, 2017 at 9:06
  • \$\begingroup\$ ideone.com/ZUhsEK \$\endgroup\$ Commented Dec 17, 2017 at 16:21
  • 2
    \$\begingroup\$ That class is mandatory in leetcode. \$\endgroup\$ Commented Dec 17, 2017 at 19:23

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.