Guest User

Untitled

a guest
Oct 21st, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. class bst_node(object):
  2.  
  3. def __init__(self, val):
  4. self.val = val
  5. self.left = None
  6. self.right = None
  7. self.left_count = 0 # less than
  8.  
  9. # Name of this class is given by LeetCode, not my choice.
  10. class Solution(object):
  11.  
  12. def add_node(self, bst_pointer, new_node, position):
  13. if bst_pointer == None:
  14. return position, new_node
  15. if new_node.val < bst_pointer.val:
  16. bst_pointer.left_count += 1
  17. position, bst_pointer.left = self.add_node(bst_pointer.left, new_node, position)
  18. else:
  19. if new_node.val > bst_pointer.val:
  20. position += 1
  21. position += bst_pointer.left_count
  22. position, bst_pointer.right = self.add_node(bst_pointer.right, new_node, position)
  23. return position, bst_pointer
  24.  
  25. # This method signature is also given by Leetcode.
  26. def countSmaller(self, nums):
  27. """
  28. :type nums: List[int]
  29. :rtype: List[int]
  30. """
  31. res = []
  32. bst = None
  33.  
  34. for n in nums[::-1]:
  35. smaller_after, bst = self.add_node(bst, bst_node(n), 0)
  36. res.append(smaller_after)
  37.  
  38. return res[::-1]
  39.  
  40. # Few test cases ...
  41. print(Solution().countSmaller([]))
  42. print(Solution().countSmaller([5, 2, 6, 1]))
Add Comment
Please, Sign In to add comment