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
- 有多少小于当前数字的数字
- 看不上|为什么还有用户看不上华为Mate40系列来看看内行人怎么说
- GB|备货充足要多少有多少,5000mAh+128GB,红米新机首销快速现货
- 纠结|硬杠红米Note9Pro?iQOO Z1跌至1575,对比之后纠结了!
- 作家|逾万名作家联名反对亚马逊有声书轻松退换政策
- 王兴称美团优选目前重点是建设核心能力;苏宁旗下云网万店融资60亿元;阿里小米拟增资居然之家|8点1氪 | 美团
- 长安|长安傍上华为这个大腿,市值暴涨500亿!可见华为影响力之大?
- 车企|华为不造车!但任正非加了一个有效期,3年
- 研发|闽企制伞有“功夫”项目入选国家重点研发计划
- 商品|问道自有品牌,山姆多方博弈
- 培育|跨境电商人才如何培育,长沙有“谱”了