【路飞】算法与数据结构-计算右侧小于当前元素的个数

109 阅读1分钟

不管全世界所有人怎么说,我都认为自己的感受才是正确的。无论别人怎么看,我绝不打乱自己的节奏。喜欢的事自然可以坚持,不喜欢的怎么也长久不了。

LeetCode:原题地址

题目要求

给你一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是  nums[i] 右侧小于 nums[i] 的元素的数量。

示例 1:

输入:nums = [5,2,6,1]
输出:[2,1,1,0] 
解释:
5 的右侧有 2 个更小的元素 (21)
2 的右侧仅有 1 个更小的元素 (1)
6 的右侧有 1 个更小的元素 (1)
1 的右侧有 0 个更小的元素

示例 2:

输入: nums = [-1]
输出: [0]

示例 3:

输入: nums = [-1,-1]
输出: [0,0]

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104

思路

首先是要输出一数组,答案按索引值对应输入,counts[i]里存的是nums[i]>num[i++]的值的数量,所以这里用函数countNum来计算小于nums[i]的值的数量。

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var countSmaller = function(nums) {
    let counts = [];
    for(let i=0;i<nums.length;i++){ 
        let j = countNum(nums,i);//计算在该索引值下的值
        counts.push(j);
    }
    return counts;
};
function countNum(nums,ind){
    let j = 0;
    for(let i=ind;i<nums.length;i++){
        if(nums[ind]>nums[i]){//当num[i]>num[i++] 值+1
            j++;
        }
    }
    return j;//输出大于右边的值的数量
}