题目

给你一个数组 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简单题之有多少小于当前数字的数字相关推荐

  1. LeetCode简单题之字符串转化后的各位数字之和

    题目 给你一个由小写字母组成的字符串 s ,以及一个整数 k . 首先,用字母在字母表中的位置替换该字母,将 s 转化 为一个整数(也就是,'a' 用 1 替换,'b' 用 2 替换,- 'z' 用 ...

  2. LeetCode简单题之只出现一次的数字

    题目 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入 ...

  3. LeetCode简单题之检查句子中的数字是否递增

    题目 句子是由若干 token 组成的一个列表,token 间用 单个 空格分隔,句子没有前导或尾随空格.每个 token 要么是一个由数字 0-9 组成的不含前导零的 正整数 ,要么是一个由小写英文 ...

  4. LeetCode简单题之找到所有数组中消失的数字

    题目 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内.请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果. 示例 1 ...

  5. LeetCode简单题之将所有数字用字符替换

    题目 给你一个下标从 0 开始的字符串 s ,它的 偶数 下标处为小写英文字母,奇数 下标处为数字. 定义一个函数 shift(c, x) ,其中 c 是一个字符且 x 是一个数字,函数返回字母表中 ...

  6. LeetCode简单题之两个数对之间的最大乘积差

    题目 两个数对 (a, b) 和 (c, d) 之间的 乘积差 定义为 (a * b) - (c * d) . 例如,(5, 6) 和 (2, 7) 之间的乘积差是 (5 * 6) - (2 * 7) ...

  7. LeetCode简单题之Fizz Buzz

    题目 给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中: answer[i] == "FizzBu ...

  8. C#LeetCode刷题之#136-只出现一次的数字(Single Number)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4046 访问. 给定一个非空整数数组,除了某个元素只出现一次以外, ...

  9. LeetCode简单题之猜数字大小

    题目 猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪个数字. 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了. 你可以通过调用一个预先 ...

最新文章

  1. xutils使用手册(二)——数据库
  2. 由浅入深laravel教程 :中间件
  3. 《JavaScript凌厉开发 Ext详解与实践》的目录
  4. 视频播放器——开源免费三大代表
  5. SQL经典问题1——产品、颜色、数量
  6. Kubernetes AIOps解决方案商 Carbon Relay获6300万美元A轮融资
  7. 关于tomcat启动失败的一个原因
  8. Bootstrap表格内容垂直水平居中
  9. java初_JAVA的初体验
  10. 【软件分析与挖掘】Vision of Software Clone Management: Past, Present, and Future (Keynote Paper)...
  11. java求立方体表面积和体积_设计一个立方体类BOX,它能计算并输出立方体的体积和表面积...
  12. 已知圆上任意两点求圆心和半径_圆曲线(已知两点和半径)座标计算
  13. 如何用计算机算回归方程,简单线性回归方程与在线计算器_三贝计算网_23bei.com...
  14. 人人网主页登录_人人网回归,你的前任和全部黑历史将被翻开!买账吗?
  15. Vue面试中,经常会被问到的面试题
  16. 全国省市区的数据导入
  17. 小米摄像头上传云服务器,杜老师说群晖:小米云摄像头无法对接群晖存储解决方法...
  18. 一加5android,不输Lineage OS,一加5刷入Paranoid Android体验
  19. openlayers6【五】地图图层数据来源 source 详解
  20. 从零开始搭建完整的电影全栈系统(六)——影片Api示例、说明及应用

热门文章

  1. 简单解决用VS编写hello world时命令行一闪而过
  2. HJ75 公共字符串计算
  3. 2022-2028年中国水基胶行业市场深度评估及前瞻研究报告
  4. 2022-2028年中国橡胶手套行业市场研究及前瞻分析报告
  5. 【微服务架构】SpringCloud使用Ribbon实现负载均衡
  6. 关于pytorch--embedding的问题
  7. TensorFlow中的语义分割套件
  8. GPU微观物理结构框架
  9. 深度学习与传统图像识别
  10. FastAdmin扩展PHPEXCEL,PHP7.3高版本兼容问题