LeetCode1365. 有多少小于当前数字的数字 JAVA

- 日理万妓 2022-12-18 11:56 176阅读 0赞

给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。

换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。

以数组形式返回答案。

  1. 示例 1
  2. 输入:nums = [8,1,2,2,3]
  3. 输出:[4,0,1,1,3]
  4. 解释:
  5. 对于 nums[0]=8 存在四个比它小的数字:(122 3)。
  6. 对于 nums[1]=1 不存在比它小的数字。
  7. 对于 nums[2]=2 存在一个比它小的数字:(1)。
  8. 对于 nums[3]=2 存在一个比它小的数字:(1)。
  9. 对于 nums[4]=3 存在三个比它小的数字:(12 2)。
  10. 示例 2
  11. 输入:nums = [6,5,4,8]
  12. 输出:[2,1,0,3]
  13. 示例 3
  14. 输入:nums = [7,7,7,7]
  15. 输出:[0,0,0,0]
  16. 提示:
  17. 2 <= nums.length <= 500
  18. 0 <= nums[i] <= 100
  19. 来源:力扣(LeetCode
  20. 链接:https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number
  21. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:
第一种方法:暴力解法
第二种方法:
1、新建一个数组,并对题目的数组进行复制;
2、对新建数组进行排序,并利用map映射数值和数组中有多少个比当前数值小的数字;
3、根据nums的位置和map映射得到结果,返回就可以了。

  1. class Solution {
  2. public int[] smallerNumbersThanCurrent(int[] nums) {
  3. int []res=new int[nums.length];
  4. int []tmp=new int[nums.length];
  5. Map<Integer,Integer> map=new HashMap<>();
  6. for(int i=0;i<nums.length;i++){
  7. tmp[i]=nums[i];
  8. }
  9. Arrays.sort(tmp);
  10. for(int i=0;i<nums.length;i++){
  11. if(!map.containsKey(tmp[i]))
  12. map.put(tmp[i],i);
  13. }
  14. for(int i=0;i<nums.length;i++){
  15. res[i]=map.get(nums[i]);
  16. }
  17. /*暴力解法
  18. for(int i=0;i<nums.length;i++){
  19. int cnt=0;
  20. for(int j=0;j<nums.length;j++){
  21. if(nums[i]>nums[j]) cnt++;
  22. }
  23. res[i]=cnt;
  24. }*/
  25. return res;
  26. }
  27. }

发表评论

表情:
评论列表 (有 0 条评论,176人围观)

还没有评论,来说两句吧...

相关阅读