给你一个数组 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

这道题暴力解法两层循环也可以,时间复杂度为O(n^2);
所以可以用哈希表来进行优化,

首先既然要找到小于当前数字的个数,那么只需要把nums数组排序当前位置之前的都是比它小的了;
这里就可以用一个哈希表,nums作为索引下标作为数值,这样就可以快速找到当前nums数的下标,该下标即为比当前位置小的元素个数;

这里需要注意一点,如果nums里面有重复的元素怎么办?
如1、2、3、4、5、5、5、5 第一个5下标为4,最后一个5下标为7,我们要用的肯定是下标为4的5,所以我们在构建hash数组时需要倒着遍历nums;

最后只需要再遍历原数组(排序前的),用hash快速的找到对应小于nums的数的个数;

代码如下:

class Solution {public:vector<int> smallerNumbersThanCurrent(vector<int>& nums) {vector<int> vec(nums);sort(vec.begin(), vec.end());vector<int> hash(101);for (int i = vec.size() - 1; i >= 0; --i) {hash[vec[i]] = i;}for (int i = 0; i < nums.size(); ++i) {vec[i] = hash[nums[i]];}return vec;}
};

这道题用map当然也可以,但是能用数组的一定优先考虑数组,毕竟使用数组耗费的时间一定比map要少很多;

1365. 有多少小于当前数字的数字(哈希表)相关推荐

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

    2020-03-17 1.题目描述 有多少小于当前数字的数字 2.题解 直接进行搜索即可 3.代码 #include <iostream> #include <vector> ...

  2. leetcode 1365. 有多少小于当前数字的数字(排序)

    给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目. 换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 ...

  3. leetcode:前 K 个高频元素、删除字符串中的所有相邻重复项、有多少小于当前数字的数字、有效的山脉数组、独一无二的出现次数(JavaScript)

    文章目录 347. 前 K 个高频元素 思路 1047. 删除字符串中的所有相邻重复项 思路 1365. 有多少小于当前数字的数字 思路 优化 继续优化 完整代码 941. 有效的山脉数组 思路 12 ...

  4. 【Leetcode1365】有多少小于当前数字的数字:详解

    [Leetcode1365] 有多少小于当前数字的数字 1. 题目 给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目. 换而言之,对于每个 nums[i] ...

  5. 力扣 有多少小于当前数字的数字

    力扣 有多少小于当前数字的数字 题目描述 给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目. 换而言之,对于每个 nums[i] 你必须计算出有效的 j ...

  6. 在所有的N位数中,有多少个数中有偶数个数字3(说明,0是偶数)?

    在所有的N位数中,有多少个数中有偶数个数字3(说明,0是偶数)? [输入格式] 读入一个数N [输出格式] 输出有多少个数中有偶数个数字3. [输入样例] 2 [输出样例] 73(由于 位数 比较大的 ...

  7. 数组-丢失的数字(哈希表法)

    题意: 给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数. 示例 1: 输入:nums = [3,0,1] 输出:2 解释:n = 3 ...

  8. python随机生成30个8_Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例...

    上代码: 环境:Python3 import random,string s=string.ascii_letters+string.digits print(s) n={''.join(random ...

  9. 数字vlsi芯片设计_【数字逻辑 | 数字逻辑导论】课程导论

    整理自:丁磊.张海笑<数字逻辑与EDA设计>.南京理工大学<数字逻辑电路> 数字逻辑导论 一.数字技术的发展 布尔代数 乔治·布尔(George Boole,1815~1864 ...

最新文章

  1. 使用条件卷积进行实例和全景分割
  2. ajax前后台交互 .net,使用ajax进行前后台的数据交互
  3. python实现抓取必应图片设置桌面
  4. 解决AttributeError: 'module' object has no attribute 'main' 安装第三方包报错
  5. Two Merged Sequences(CF 1144 G)
  6. 【面试题 - 最大值减去最小值小于或等于 num 的子数组数量】滑动窗口
  7. php隐藏路径ngnix,thinkphp框架在nginx环境下去掉index.php路径显示
  8. 分组统计 - DataFrame.groupby() 所见的各种用法 - Python代码
  9. Mars——基于矩阵的统一分布式计算框架
  10. C++程序设计语言编程风格演变史
  11. python egg
  12. uni-app + vue-cli3 安装axios、vant等依赖 - 操作篇
  13. PCL1.8.0/ Qt5.7.0开发环境配置
  14. 一张纸厚度是多少毫米_科学有意思 |一张纸对折,最多只能折9次?不信你试一试...
  15. 基于单片机的电子琴设计和硬件平台设计
  16. 初学者如何学习好嵌入式开发?讲解嵌入式学习教程
  17. 怎样给图片降噪?这几个图片降噪软件可以帮助你
  18. 霞浦职业中专学校计算机专业,霞浦职业中专学校
  19. 本科毕业、硕士毕业和博士毕业PPT制作和预答辩、答辩注意事项
  20. debug模式启用浏览器

热门文章

  1. 中国联通华东云数据中心—电气培训
  2. 计算机设置从光盘启动怎么办,设置BIOS从光盘启动教程
  3. Html画布w3c,HTML canvas 标签
  4. android https 简书,关于Android http改为https
  5. CV:NVIDIA驱动程序安装图文教程(根据Anaconda的CUDA版本去安装对应匹配的NVIDIA)之详细攻略
  6. HighNewTech:2019.08.08华为发布—面向2025十大趋势
  7. ML之UL:无监督学习Unsupervised Learning的概念、应用、经典案例之详细攻略
  8. Win:Win系统下安装Linux的Ubuntu系统的简介、安装之详细攻略
  9. Py:python利用easygui实现最简单GUI带你学习区块链技术的发展和由来
  10. 深入浅出统计学 第六章 排列与组合