内外循环遍历解法
最易懂的方式:
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. 高度检查器
博客探讨了如何使用桶排序思想解决LeetCode中的数组问题,包括内外循环遍历解法和桶排序的详细步骤。文章还提到了桶排序在高度检查器等题目中的应用。
1193

被折叠的 条评论
为什么被折叠?



