leetcode之有多少小于当前数字的数字

序本文主要记录一下leetcode之有多少小于当前数字的数字
leetcode之有多少小于当前数字的数字文章插图
题目给你一个数组 nums , 对于其中每个元素 nums[i] , 请你统计数组中比它小的所有数字的数目 。 换而言之 , 对于每个 nums[i] 你必须计算出有效的 j 的数量 , 其中 j 满足 j != i 且 nums[j] < nums[i]。 以数组形式返回答案 。 示例 1:输入:nums = [8,1,2,2,3]输出:[4,0,1,1,3]解释: 对于 nums[0]=8 存在四个比它小的数字:(1 , 2 , 2 和 3) 。对于 nums[1]=1 不存在比它小的数字 。 对于 nums[2]=2 存在一个比它小的数字:(1) 。对于 nums[3]=2 存在一个比它小的数字:(1) 。对于 nums[4]=3 存在三个比它小的数字:(1 , 2 和 2) 。 示例 2:输入:nums = [6,5,4,8]输出:[2,1,0,3]示例 3:输入:nums = [7,7,7,7]输出:[0,0,0,0]提示:2 <= nums.length <= 5000 <= nums[i] <= 100来源:力扣(LeetCode)链接:著作权归领扣网络所有 。 商业转载请联系官方授权 , 非商业转载请注明出处 。 题解【leetcode之有多少小于当前数字的数字】class Solution {public int[] smallerNumbersThanCurrent(int[] nums) {int[] countArr = new int[100+1];int[] countAgg = new int[100+1];for (int num : nums) {countArr[num] = countArr[num] + 1;countAgg[num] = countAgg[num] + 1;}for (int i = 1; i< countAgg.length; i++) {countAgg[i] = countAgg[i-1] + countAgg[i];}int[] result = new int[nums.length];for (int i=0; i< nums.length; i++) {result[i] = nums[i] == 0 ? 0 : countAgg[nums[i]] - countArr[nums[i]];}return result;}}小结这里先用countArr来统计每个nums元素的个数 , 之后对countAgg用前面的元素值进行累加 , 最后遍历nums来计算小于当前数字的个数 , 这里会在利用countArr , 因为存在重复的元素值 。
doc

  • 有多少小于当前数字的数字