leetcode 解题 第1365题,有多少小于当前数字的数字
题目:给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。
以数组形式返回答案。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number
第一种思路:第一直觉(暴力解决!!)
emmmmm思路简单,代码简单,没考虑那么多。所以时间复杂度较高!!!不好!!
class Solution {
public int[] smallerNumbersThanCurrent(int[] nums) {
ArrayList<Integer> List = new ArrayList<Integer>();
for(int i=0;i<nums.length;i++){
int ans=0;
for(int j=0;j<nums.length;j++){
if(nums[i]>nums[j]){
ans++;
}
}
List.add(ans);
}
return List.stream().mapToInt(Integer::intValue).toArray();
}
}
第二种思路:看了别人的解答,高效好用!
class Solution {
public int[] smallerNumbersThanCurrent(int[] nums) {
int n = nums.length;
int[] pnums = new int[n];
pnums = Arrays.copyOf(nums, n);//长度为n,前面的数为nums----这里pnums=nums
Arrays.sort(pnums);//对数组进行排序
Map<Integer, Integer> map = new HashMap<>();//类似于python中的词典,成对出现,用于索引。
map.put(pnums[0],0);//key值为pnums[0],value为0;
for(int i = 1; i < n; i++){
if(pnums[i] > pnums[i-1]){
map.put(pnums[i],i);
}
}//这是去除重复字段
for(int i = 0; i < n; i++){
pnums[i] = map.get(nums[i]);//获取值为nums[i]的value值
}
return pnums;
}
}
这是参考别人代码,加上了自己注释!小菜鸟还要加油!!!希望自己也能写出来……
141

被折叠的 条评论
为什么被折叠?



