1365. 有多少小于当前数字的数字

news/2024/11/28 11:19:31/

1365. 有多少小于当前数字的数字

难度简单250

给你一个数组 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]
/*** @param {number[]} nums* @return {number[]}*/
function sortarr(a, b) {return a - b;
}
var smallerNumbersThanCurrent = function (nums) {let newArr = nums.filter(function (item, index) {return nums.indexOf(item) === index; // 因为indexOf 只能查找到第一个});if (newArr.length <= 1) {return new Array(nums.length).fill(0);}let arr = [...nums];let temp = [0];let map1 = new Map();let map2 = new Map();let rgt = [];let i = 0;let j = 0;let flag = 0;for (let item of nums) {map1.set(i, item);i++;}
//   console.log(map1);let a = 0;arr.sort(sortarr);
//   console.log("排序后arr:", arr);for (let i = 1; i <= arr.length; i++) {//计算每个数的比它小的数量if (arr[i] > arr[i - 1]) {a++;temp.push(i);} else if (arr[i] == arr[i - 1]) {temp.push(temp[i - 1]);}}for (const val of arr) {map2.set(val, temp[j]);j++;}
//   console.log(map2);for (let i = 0; i < arr.length; i++) {rgt.push(map2.get(nums[i]));}//   console.log(rgt);return rgt;
};

题解:

        首先应当求出每个数在这个数组中有几个小于自身的数,排序之后就能计算出来,面对相邻两个数相等的情况做特殊处理:沿用上一个与其自身值相等的所记录的小于自身的值,存入temp中。

        用map1来记录原数组中每个数组的下标,用map2来记录排序后数组的值(key)与temp中对应的小于数的个数(value)。

        用rgt数组将map2的值按照对应的原数组填入,最后返回。


http://www.ppmy.cn/news/41789.html

相关文章

Ae:灯光图层

灯光 Light是合成中可用于照亮其他 3D 图层并能产生投影、反射的一种元素&#xff0c;类似于光源。如果没有建立灯光图层&#xff0c;系统会使用默认的“环境光”来照亮场景。当建立了灯光图层之后&#xff0c;以所建立的灯光来照明。一般可根据实际需要创建一个或多个相同或不…

OA系统是什么意思?企业为什么要用OA办公系统软件?

阅读本文您将了解&#xff1a;1、什么是OA&#xff1b;2、OA系统是什么意思&#xff1b;2、OA系统功能和对企业重要性 什么是OA&#xff1f; OA即办公自动化&#xff08;Office Automation&#xff0c;简称OA&#xff09;&#xff0c;是将计算机、通信等现代化技术运用到传统…

Java动态代理

一. 什么是动态代理 假设Student里面有一个吃饭的eat方法&#xff0c;那么现在我要给这个方法去增加其他的功能&#xff0c;比如说吃饭之前&#xff0c;要去拿筷子&#xff0c;要去盛饭&#xff0c;按照以前所学&#xff0c;我们只能把这两段代码都写在eat方法当中&#xff0c;…

golang指针相关

指针相关的部分实在是没有搞太明白&#xff0c;抽时间来总结下。 1.指针相关基础知识 比如现在有一句话&#xff1a;『谜底666』&#xff0c;这句话在程序中一启动&#xff0c;就要加载到内存中&#xff0c;假如内存地址0x123456&#xff0c;然后我们可以将这句话复制给变量A&…

CentOS Ubuntu Debian三个linux的异同对比

Linux有非常多的发行版本&#xff0c;从性质上划分&#xff0c;大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本。 商业版本以Redhat为代表&#xff0c;开源社区版本则以debian为代表。这些版本各有不同的特点&#xff0c;在不同的应用领域发挥着不同的作用&…

执行命令行程序测试自动化

这几天有一个小工具需要做测试&#xff0c;是一个命令行工具&#xff0c;这个命令行工具有点类似mdbg等命令行工具&#xff0c;即程序运行后&#xff0c;在命令行等待用户敲入的命令&#xff0c;处理命令并显示结果&#xff0c;再继续等待用户敲入新的命令。 原来的测试用例都…

ROS开发之如何制作launch启动文件?

文章目录0、引言1、Launch文件语法2、Launch示例0、引言 笔者因研究课题涉及ROS开发&#xff0c;学习了古月居出品的ROS入门21讲&#xff0c;为巩固launch的知识&#xff0c;本文将ROS的launch启动文件制作一讲内容进行总结。launch文件通过XML文件实现多节点的配置和启动&…

那些警示良言——鲁迅

鲁迅的警示言 1、中国人的性情是总喜欢调和折中的&#xff0c;譬如你说&#xff0c;这屋子太暗&#xff0c;须在这里开一个窗&#xff0c;大家一定不允许的。但如果你主张拆掉屋顶他们就来调和&#xff0c;愿意开窗了。 ——《无声的中国》一九二七年 2、我每看运动会时&…