题目链接:
https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number/
package leetcode;
public class Smaller_01 {
public static int[] SmallerByFreq(int[] nums) {//快速排序
int[] freq=new int[101];
//创建以数字为键,以数字出现的次数为值的数组(题目给出数组长度0-100所以数组长度为101)
for (int num:nums) {
freq[num]++;
}
//// freq记录包含自身在内的和比自己小的数的总和
for (int i = 1; i < freq.length-1; i++) {
freq[i]+=freq[i-1];
}
//如果nums[i]=0会让freq数组越界需要判断
//现在freq记录的是包含自身在内的和比自己小的数的总和
//所以freq[nums[i]-1]记录的是比自己小的数的总和
for (int i =0; i < nums.length; i++) {
if(nums[i]==0) {
nums[i]=0;
}else {
nums[i]=freq[nums[i]-1];
}
}
return nums;
}
public static void main(String[] args) {
int[] nums=new int[] {8,1,2,2,3};
Smaller_01 smaller_01=new Smaller_01();
smaller_01.SmallerByFreq(nums);
}
}
网友评论