思路分析

数据范围比较小,可以用桶的思想,统计出各个数出现的频率。然后用迭代的方法,用dict[i]表示i出现的次数,sum[i]表示比i小的数的个数,则
1365. 有多少小于当前数字的数字 - 图1

代码实现

  1. class Solution {
  2. public int[] smallerNumbersThanCurrent(int[] nums) {
  3. // 数据范围0-100
  4. // dict[i]表示i出现的次数
  5. int[] dict = new int[101];
  6. // sum[i]表示比i小的数的个数
  7. int[] sum = new int[101];
  8. int[] ans = new int[nums.length];
  9. int i;
  10. for (i = 0; i < nums.length; ++i) {
  11. dict[nums[i]]++;
  12. }
  13. for (i = 1; i <= 100; ++i) {
  14. sum[i] = sum[i - 1] + dict[i - 1];
  15. }
  16. for (i = 0; i < nums.length; ++i) {
  17. ans[i] = sum[nums[i]];
  18. }
  19. return ans;
  20. }
  21. }