leetcode:数组-桶排序思想理解

博客探讨了如何使用桶排序思想解决LeetCode中的数组问题,包括内外循环遍历解法和桶排序的详细步骤。文章还提到了桶排序在高度检查器等题目中的应用。

数组-1365. 有多少小于当前数字的数字

内外循环遍历解法

最易懂的方式:
1、外循环,遍历数组内每个元素
2、内循环,遍历当前元素之前所有元素,累加

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(i!=j && nums[i]>nums[j]){
                    count++;
                }
            }
            res[i] = count;
        }
        return res;
    }
}

执行结果:
在这里插入图片描述

桶排序思想

class Solution {
    public int[] smallerNumbersThanCurrent(int[] nums) {
        int[] keg = new int[101];
        for (int i : nums){
            keg[i]++;
        }
        int pre = 0;
        for (int i = 0; i < 101; i++) {
            int val = keg[i];
            if (val > 0) keg[i] = pre;
            pre += val;
        }
        for (int i = 0; i < nums.length; i++) {
            nums[i] = keg[nums[i]];
        }
        return nums;
    }
}

在这里插入图片描述
代码分析:nums = [8,1,2,2,3];
1、先生成一个桶

int[] keg = new int[101];

在这里插入图片描述

2、 桶数组元素的索引,代表nums数组元素的值
桶数组元素的值,代表nums数组元素出现的个数

for (int i : nums){
    keg[i]++;
}

在这里插入图片描述

3、遍历桶数组元素,索引越大,值越大;
所以通过pre记录前方出现了几个元素,就是比当前索引值小的数量。

       int pre = 0;
       for (int i = 0; i < 101; i++) {
           int val = keg[i];
           if (val > 0) keg[i] = pre;
           pre += val;
       }

在这里插入图片描述

4、返回结果[4,0,1,1,3]

 for (int i = 0; i < nums.length; i++) {
        nums[i] = keg[nums[i]];
     }
 return nums;

一些可以用桶排序解决的题:
1051. 高度检查器

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值