1365. How Many Numbers Are Smaller Than the Current Number
Description
Given the array nums
, for each nums[i]
find out how many numbers in the array are smaller than it. That is, for each nums[i]
you have to count the number of valid j's
such that j != i
and nums[j] < nums[i]
.
Return the answer in an array.
Example 1:
Input: nums = [8,1,2,2,3] Output: [4,0,1,1,3] Explanation: For nums[0]=8 there exist four smaller numbers than it (1, 2, 2 and 3). For nums[1]=1 does not exist any smaller number than it. For nums[2]=2 there exist one smaller number than it (1). For nums[3]=2 there exist one smaller number than it (1). For nums[4]=3 there exist three smaller numbers than it (1, 2 and 2).
Example 2:
Input: nums = [6,5,4,8] Output: [2,1,0,3]
Example 3:
Input: nums = [7,7,7,7] Output: [0,0,0,0]
Constraints:
2 <= nums.length <= 500
0 <= nums[i] <= 100
Solutions
Solution 1: Sorting + Binary Search
We can make a copy of the array \(nums\), denoted as \(arr\), and then sort \(arr\) in ascending order.
Next, for each element \(x\) in \(nums\), we can use binary search to find the index \(j\) of the first element that is greater than or equal to \(x\). Then \(j\) is the number of elements that are smaller than \(x\). We can store \(j\) in the answer array.
The time complexity is \(O(n \times \log n)\), and the space complexity is \(O(n)\). Where \(n\) is the length of the array \(nums\).
1 2 3 4 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Solution 2: Counting Sort + Prefix Sum
We notice that the range of elements in the array \(nums\) is \([0, 100]\). Therefore, we can use the counting sort method to first count the number of each element in the array \(nums\). Then we calculate the prefix sum of the counting array. Finally, we traverse the array \(nums\). For each element \(x\), we directly add the value of the element at index \(x\) in the counting array to the answer array.
The time complexity is \(O(n + M)\), and the space complexity is \(O(M)\). Where \(n\) and \(M\) are the length and the maximum value of the array \(nums\), respectively.
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|