Skip to content

Latest commit

 

History

History
108 lines (94 loc) · 2.72 KB

1365. How Many Numbers Are Smaller Than the Current Number.md

File metadata and controls

108 lines (94 loc) · 2.72 KB

leetcode-cn Daily Challenge on October 26th, 2020.


Difficulty : Easy

Related Topics : ArrayHashTable


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

Solution

  • mine
    • Java
      • Runtime: 4 ms, faster than 63.52%, Memory Usage: 39 MB, less than 10.26% of Java online submissions

        // O(N * logN)time
        // O(N)space
        public int[] smallerNumbersThanCurrent(int[] nums) {
            int n = nums.length;
            Map<Integer, Integer> map = new HashMap<>();
            for(int i = 0; i < n; i++){
                map.put(i, nums[i]);
            }
            Arrays.sort(nums);
            Map<Integer, Integer> map2 = new HashMap<>();
            map2.put(nums[0], 0);
            int cur = 0;
            for(int i = 1; i < n; i++){
                if(nums[i] > nums[i - 1]){
                    cur = i;
                }
                map2.put(nums[i], cur);
            }
            int[] res = new int[n];
            for(int i = 0; i < n; i++){
                res[i] = map2.get(map.get(i));
            }
            return res;
        }
        
      • BucketSort Runtime: 1 ms, faster than 98.69%, Memory Usage: 39.2 MB, less than 10.26% of Java online submissions

        // O(N)time
        // O(N)space
        public int[] smallerNumbersThanCurrent(int[] nums) {
            int n = nums.length;
            int[] arr = new int[101];
            for(int num : nums){
                arr[num]++;
            }
            for(int i = 1; i < 101; i++){
                arr[i] += arr[i - 1];
            }
            int[] res = new int[n];
            for(int i = 0; i < n; i++){
                res[i] =nums[i] == 0 ? 0 : arr[nums[i] - 1];
            }
            return res;
        }