• [LeetCode] 1365. How Many Numbers Are Smaller Than the Current Number


    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

    有多少小于当前数字的数字。题目即是题意,对于每一个数字nums[i],请你找出数组中到底有多少个数字小于他。

    暴力解很简单,对于每一个数字nums[i],我们再次扫描数组,看看有多少个数字小于他。复杂度是O(n^2)。介于数据量不大,其实暴力解还是可以通过的。

     

    最优解的思路是counting sort/bucket sort。因为数据的限制里面有这么一条,这个条件可以帮助我们确定bucket的数量。

    0 <= nums[i] <= 100

    所以我们可以创建101个桶子,然后遍历input数组,计算这101个数字每个数字的frequency。之后从0开始,往后累加每个数字的frequency。最后返回结果的时候,看一下对于每个数字nums[i],他在桶子对应坐标下的值是多少。

    时间O(n)

    空间O(n)

    Java实现

     1 class Solution {
     2     public int[] smallerNumbersThanCurrent(int[] nums) {
     3         int[] freq = new int[101];
     4         // count the frequency
     5         for (int num : nums) {
     6             freq[num]++;
     7         }
     8         // sum up all the frequencies
     9         for (int i = 1; i < freq.length; i++) {
    10             freq[i] += freq[i - 1];
    11         }
    12         // output
    13         int[] res = new int[nums.length];
    14         for (int i = 0; i < res.length; i++) {
    15             if (nums[i] > 0) {
    16                 res[i] = freq[nums[i] - 1];
    17             }
    18         }
    19         return res;
    20     }
    21 }

    相关题目

    315. Count of Smaller Numbers After Self

    1365. How Many Numbers Are Smaller Than the Current Number

    LeetCode 题目总结

  • 相关阅读:
    python标准库&多线程
    filter()函数
    python itertools模块
    lambda()函数
    python 基础学习六:字符串方法总结
    装饰器
    map()函数
    python算法题
    Delphi XE2真的快来了吗?
    如何设计出留住买家的B2C网站
  • 原文地址:https://www.cnblogs.com/cnoodle/p/13282285.html
Copyright © 2020-2023  润新知