Leetcode 刷題 ------1365.有多少小於當前數字的數字

向日葵不喜歡太陽發表於2020-10-26

1365.有多少小於當前數字的數字

1.題目描述

給你一個陣列 nums,對於其中每個元素 nums[i],請你統計陣列中比它小的所有數字的數目。

換而言之,對於每個 nums[i] 你必須計算出有效的 j 的數量,其中 j 滿足 j != i 且 nums[j] < nums[i] 。

以陣列形式返回答案

2.題目示例

在這裡插入圖片描述

3.思路及程式碼

  • 思路一:暴力求解
  • 程式碼:
class Solution {
    public int[] smallerNumbersThanCurrent(int[] nums) {
        int[] res = new int[nums.length];

        for(int i = 0; i < nums.length; i++){
            int count = 0;
            for(int j = 0; j < nums.length; j++){
                if(nums[i] > nums[j] && i != j){
                    count++;
                }
            }
            res[i] = count;
        }

        return res;
    }
}
  • 思路二:計數排序
  • 程式碼:
class Solution {
    public int[] smallerNumbersThanCurrent(int[] nums) {
        int[] cnt = new int[101];
        int n = nums.length;
        for (int i = 0; i < n; i++) {
            cnt[nums[i]]++;
        }
        for (int i = 1; i <= 100; i++) {
            cnt[i] += cnt[i - 1];
        }
        int[] ret = new int[n];
        for (int i = 0; i < n; i++) {
            ret[i] = nums[i] == 0 ? 0 : cnt[nums[i] - 1];
        }
        return ret;
    }
}

相關文章