题目
给你一个数组 nums
,对于其中每个元素 nums[i]
,请你统计数组中比它小的所有数字的数目。
换而言之,对于每个 nums[i]
你必须计算出有效的 j
的数量,其中 j
满足 j != i
且 nums[j] < nums[i]
。
以数组形式返回答案。
示例1:
1 | 输入:nums = [8,1,2,2,3] |
示例2:
1 | 输入:nums = [6,5,4,8] |
示例3:
1 | 输入:nums = [7,7,7,7] |
提示:
- 2 <= nums.length <= 500
- 0 <= nums[i] <= 100
解法
解法一:
暴力破解。两次遍历,统计每个比每个数字小的总数即可。
JAVA
1 | public int[] smallerNumbersThanCurrent(int[] nums) { |
解法二:
从题目的限制条件来看,数字的值最大也只有100.因此,可以申请一个长度为100的数组count,值初始化为0。然后遍历nums,对每个nums[i],count[nums[i]]位置上的值自增1.
接着,遍历count数组,将count[i]上的值,赋为它前一位以及当前位的和。
最后遍历nums数组,直接将count[muns[i] - 1]位置上的值取出置入结果数组即可。
JAVA
1 | public int[] smallerNumbersThanCurrent(int[] nums) { |