解题思路
先排序,后计数。
nums = [8,1,2,2,3]
//键是a[i],值是比a[i]小的数的个数。
Map<Integer,Integer> hash = new HashMap<>();
a = [1,2,2,3,8]
int i=0;
i指向0时,比a[i]小的个数一定是0 hash.put(a[i],0);
i指向1时,比a[i]小的个数是1 hash.put(a[i],i);
i指向2时,又a[i]=a[i-1],则比a[i]小的个数是hash.get(a[i-1]) hash.put(a[i],hash.get(a[i-1]));
i指向3时,比a[i]小的个数是3 hash,put(a[i],i);
然后又遍历一遍nums数组
最终答案是[4,0,1,1,3]
相关代码
class Solution {
public int[] smallerNumbersThanCurrent(int[] nums) {
int a[] = new int[nums.length];
for(int i=0;i<a.length;i++) a[i] = nums[i];
Arrays.sort(a);
Map<Integer,Integer> hash = new HashMap<>();
hash.put(a[0],0);
for(int i=1;i<a.length;i++)
if(a[i]==a[i-1])hash.put(a[i],hash.get(a[i-1]));
else hash.put(a[i],i);
int t[] = new int[nums.length];
for(int i=0;i<t.length;i++) t[i] = hash.get(nums[i]);
return t;
}
}