LeetCode 솔루션 분류
[7/23] 315. Count of Smaller Numbers After Self
본문
Hard
6063172Add to ListShareYou 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]
.
Example 1:
Input: nums = [5,2,6,1] Output: [2,1,1,0] Explanation: To the right of 5 there are 2 smaller elements (2 and 1). To the right of 2 there is only 1 smaller element (1). To the right of 6 there is 1 smaller element (1). To the right of 1 there is 0 smaller element.
Example 2:
Input: nums = [-1] Output: [0]
Example 3:
Input: nums = [-1,-1] Output: [0,0]
Constraints:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
Accepted
238,807
Submissions
566,839
관련자료
-
링크
댓글 1
학부유학생님의 댓글
- 익명
- 작성일
Runtime: 7646 ms, faster than 5.01% of Python3 online submissions for Count of Smaller Numbers After Self.
Memory Usage: 31.6 MB, less than 92.65% of Python3 online submissions for Count of Smaller Numbers After Self.
Memory Usage: 31.6 MB, less than 92.65% of Python3 online submissions for Count of Smaller Numbers After Self.
class Solution:
def countSmaller(self, nums: List[int]) -> List[int]:
if len(nums) < 2: return [0]
array = sorted([nums[-1],nums[-2]])
res = [0]
if nums[-1] >= nums[-2]: res.append(0)
else: res.append(1)
for i in range(len(nums)-3, -1, -1):
res.append(self.left_insert(array, nums[i]))
return reversed(res)
def left_insert(self, array, inserting):
l, r = 0, len(array)-1
while l<r:
mid = (l+r)//2
if array[mid] < inserting:
l = mid + 1
elif array[mid] >= inserting:
r = mid
if array[l] > inserting:
while l > 0 and array[l] == array[l-1]:
l -= 1
else:
while l < len(array)-1 and array[l] == array[l+1]:
l += 1
l += 1
array.insert(l, inserting)
while l > 0 and array[l] == array[l-1]:
l -= 1
return l