[LeetCode]1365. 有多少小于当前数字的数字
2020-03-27 19:21
489 查看
1365. 有多少小于当前数字的数字
给你一个数组 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
思路
1.使用暴力法双循环解。
public int[] smallerNumbersThanCurrent(int[] nums) { int[] a=new int[nums.length]; for (int i = 0; i < nums.length; i++) { int count=0; for (int j = 0; j < nums.length; j++) { if (nums[i]>nums[j]) { count++; } a[i]=count; } } return a; }
2.复制一份原数组并进行排序,遍历排序后的数组,每个元素的下标索引就代表数组中有多少小于它的数。将值作为key,索引为value放入map中,然后再遍历原数组,将对应元素的索引值取出来,放入新的数组中。
public int[] smallerNumbersThanCurrent(int[] nums) { int n = nums.length; int[] temp = Arrays.copyOf(nums, n); Arrays.sort(temp); Map<Integer, Integer> map = new HashMap<>(); for(int i = 0; i < n; i++){ if(i == 0){ map.put(temp[i],0); }else{ //假如是temp[i]==temp[i-1],即相邻两个数相等,则第二个值不需要放入map,他用第一个数的索引。 if(temp[i] > temp[i-1]){ map.put(temp[i],i); } } } for(int i = 0; i < n; i++){ temp[i] = map.get(nums[i]); } return temp; }
3.数组中的元素取值为[0,100],使用频次数组加前缀和的解法。前缀和类似于思路2中排序后的索引。
public int[] smallerNumbersThanCurrent(int[] nums) { //频次数组 int[] hash = new int[101]; for (int num : nums) { hash[num]++; } //前缀和数组,存放元素前面有多少个小于它的元素个数。 for (int i = 1; i < hash.length; i++) { hash[i] = hash[i] + hash[i - 1]; } //结果数组 int[] temp = new int[nums.length]; for (int i = 0; i < r.length; i++) { if (nums[i]>0){ temp[i] = hash[nums[i] - 1]; } } return temp; }
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- leetcode-5344 有多少小于当前数字的数字 Python
- HDU - 1541 Stars 树状数组 单点更新(求比当前数字大的数字有多少个)
- [Leetcode]315.计算右侧小于当前元素的个数(6种方法)
- HDU - 1541 Stars 树状数组 单点更新(求比当前数字大的数字有多少个)
- HDU - 1541 Stars 树状数组 单点更新(求比当前数字大的数字有多少个)
- HDU - 1541 Stars 树状数组 单点更新(求比当前数字大的数字有多少个)
- HDU - 1541 Stars 树状数组 单点更新(求比当前数字大的数字有多少个)
- 一个数可以用二进制表示,也可以用十进制表示,如果该数的二进制表示法所有位数字之和等于十进制表示法所有位数之和,则称该数为神奇数,求小于等于M的神奇数有多少
- HDU - 1541 Stars 树状数组 单点更新(求比当前数字大的数字有多少个)
- Leetcode 315. 计算右侧小于当前元素的个数
- HDU - 1541 Stars 树状数组 单点更新(求比当前数字大的数字有多少个)
- hdu ztr loves lucky numbers (最小的但不小于n的幸运数字是多少,幸运数字只含4和7,且4的个数等于7的个数)
- HDU - 1541 Stars 树状数组 单点更新(求比当前数字大的数字有多少个)
- 每天一道LeetCode-----将数字集转成字母集,计算有多少种转换方式
- 每天一道LeetCode-----找到有多少个组合加起来和是n,每个组合的数字只能是1或者2
- 有1、2、3、4四个数字,编写程序计算出能组成多少个互不相同且无重复数字的三位数
- 【LeetCode】 [13] 罗马数字转整数
- linux 单看当前文件目录有多少个文件 以及当前目录占用空间的大小
- 获取系统当前时间,完成格式化,得到一个字符串。例如”201608130743”(指年月日时分)。再随机取3个小于10的整数,分别插入到 字符串的年、月、日后面,完成输出。
- Leetcode 07 Reverse Integer(数字反转) && 09 Palindrome number(回文判断)