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 <= 500
0 <= nums[i] <= 100
来源:力扣(LeetCode)
解题思路
考虑一个最朴素的做法——排序,排序之后如果数组中的数字都是不重复的,那么一个数字当前所在的位置前有多少个数字,便是结果,如果存在相同的数字就需要加一个统计变量来处理重复的情况。我们以示例1为例子代入代码中查看具体的情况。
class Solution:def smallerNumbersThanCurrent(self, nums: List[int]) -> List[int]:temp=[0]*len(nums)#nums = [8,1,2,2,3]L=sorted(enumerate(nums),key=lambda x:x[1])#enumerate(nums)=[(0, 8), (1, 1), (2, 2), (3, 2), (4, 3)]#L=[(1, 1), (2, 2), (3, 2), (4, 3), (0, 8)]count=1 #重复统计量for i in range(1,len(nums)):if L[i][1]>L[i-1][1]:temp[i]=temp[i-1]+countcount=1elif L[i][1]==L[i-1][1]:temp[i]=temp[i-1]count+=1#temp=[0, 1, 1, 3, 4]S=sorted(zip(L,temp),key=lambda x:x[0][0])#zip(L,temp)=[((1, 1), 0), ((2, 2), 1), ((3, 2), 1), ((4, 3), 3), ((0, 8), 4)]#S=[((0, 8), 4), ((1, 1), 0), ((2, 2), 1), ((3, 2), 1), ((4, 3), 3)]#这一步其实可以用键值对来优化return [i[1] for i in S] #返回第三列
当然这个题给定了范围数组内的元素最大也不过100,所以我还可以开辟一个100长度的数组,把原本的数组元素映射成位置信息,把频率作为新的元素,这样就可以方便统计了。
class Solution:def smallerNumbersThanCurrent(self, nums: List[int]) -> List[int]:temp=[0]*101for i in nums:temp[i]+=1for i in range(100,0,-1):if temp[i]!=0:temp[i]=sum(temp[0:i])ans=[]for i in nums:if i!=0:ans.append(temp[i])else:ans.append(0)return ans
LeetCode简单题之有多少小于当前数字的数字相关推荐
- LeetCode简单题之字符串转化后的各位数字之和
题目 给你一个由小写字母组成的字符串 s ,以及一个整数 k . 首先,用字母在字母表中的位置替换该字母,将 s 转化 为一个整数(也就是,'a' 用 1 替换,'b' 用 2 替换,- 'z' 用 ...
- LeetCode简单题之只出现一次的数字
题目 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入 ...
- LeetCode简单题之检查句子中的数字是否递增
题目 句子是由若干 token 组成的一个列表,token 间用 单个 空格分隔,句子没有前导或尾随空格.每个 token 要么是一个由数字 0-9 组成的不含前导零的 正整数 ,要么是一个由小写英文 ...
- LeetCode简单题之找到所有数组中消失的数字
题目 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内.请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果. 示例 1 ...
- LeetCode简单题之将所有数字用字符替换
题目 给你一个下标从 0 开始的字符串 s ,它的 偶数 下标处为小写英文字母,奇数 下标处为数字. 定义一个函数 shift(c, x) ,其中 c 是一个字符且 x 是一个数字,函数返回字母表中 ...
- LeetCode简单题之两个数对之间的最大乘积差
题目 两个数对 (a, b) 和 (c, d) 之间的 乘积差 定义为 (a * b) - (c * d) . 例如,(5, 6) 和 (2, 7) 之间的乘积差是 (5 * 6) - (2 * 7) ...
- LeetCode简单题之Fizz Buzz
题目 给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中: answer[i] == "FizzBu ...
- C#LeetCode刷题之#136-只出现一次的数字(Single Number)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4046 访问. 给定一个非空整数数组,除了某个元素只出现一次以外, ...
- LeetCode简单题之猜数字大小
题目 猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪个数字. 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了. 你可以通过调用一个预先 ...
最新文章
- xutils使用手册(二)——数据库
- 由浅入深laravel教程 :中间件
- 《JavaScript凌厉开发 Ext详解与实践》的目录
- 视频播放器——开源免费三大代表
- SQL经典问题1——产品、颜色、数量
- Kubernetes AIOps解决方案商 Carbon Relay获6300万美元A轮融资
- 关于tomcat启动失败的一个原因
- Bootstrap表格内容垂直水平居中
- java初_JAVA的初体验
- 【软件分析与挖掘】Vision of Software Clone Management: Past, Present, and Future (Keynote Paper)...
- java求立方体表面积和体积_设计一个立方体类BOX,它能计算并输出立方体的体积和表面积...
- 已知圆上任意两点求圆心和半径_圆曲线(已知两点和半径)座标计算
- 如何用计算机算回归方程,简单线性回归方程与在线计算器_三贝计算网_23bei.com...
- 人人网主页登录_人人网回归,你的前任和全部黑历史将被翻开!买账吗?
- Vue面试中,经常会被问到的面试题
- 全国省市区的数据导入
- 小米摄像头上传云服务器,杜老师说群晖:小米云摄像头无法对接群晖存储解决方法...
- 一加5android,不输Lineage OS,一加5刷入Paranoid Android体验
- openlayers6【五】地图图层数据来源 source 详解
- 从零开始搭建完整的电影全栈系统(六)——影片Api示例、说明及应用