https://leetcode.cn/problems/how-many-numbers-are-smaller-than-the-current-number/
题目要求
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。
以数组形式返回答案。
暴力
class Solution {
public int[] smallerNumbersThanCurrent(int[] nums) {
int n = nums.length;
int[] res = new int[n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (nums[j] < nums[i])
res[i]++;
}
}
return res;
}
}
- 直接双层遍历即可
排序
class Solution {
public int[] smallerNumbersThanCurrent(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
int n = nums.length;
int[] res = Arrays.copyOf(nums, n);
Arrays.sort(res);
for (int i = 0; i < n; i++) {
if (!map.containsKey(res[i]))
map.put(res[i], i);
}
for (int i = 0; i < n; i++) {
res[i] = map.get(nums[i]);
}
return res;
}
}
- 从小到大排序之后,元素下标就是小于当前数字的数字
- 从左到右遍历,就可以避免重复数字的问题