当前位置:   article > 正文

Java中等题-多数元素2(力扣)【摩尔投票升级版】

Java中等题-多数元素2(力扣)【摩尔投票升级版】

给定一个大小为 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。

示例 1:

输入:nums = [3,2,3]
输出:[3]

示例 2:

输入:nums = [1]
输出:[1]

示例 3:

输入:nums = [1,2]
输出:[1,2]

方法一:使用HashMap,key记录值,value记录出现次数

  1. class Solution {
  2. public List<Integer> majorityElement(int[] nums) {
  3. Map<Integer,Integer>map=new HashMap<>();
  4. for(int x:nums){
  5. map.put(x,map.getOrDefault(x,0)+1);
  6. }
  7. int n=nums.length;
  8. int t=n/3;
  9. List<Integer> list=new ArrayList<>();
  10. for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
  11. if(entry.getValue()>t){
  12. list.add(entry.getKey());
  13. }
  14. }
  15. return list;
  16. }
  17. }

方法二:使用摩尔投票:一个数组中出现次数要大于总数的三分之一,满足条件的最多也只有两个数

  1. class Solution {
  2. public List<Integer> majorityElement(int[] nums) {
  3. int a=nums[0];
  4. int a1=0;
  5. int b=nums[0];
  6. int b1=0;
  7. for(int x:nums){
  8. if(x==a){
  9. a1++;
  10. }else if(x!=a&&x!=b&&b1==0){
  11. b=x;
  12. b1++;
  13. }else if(x!=a&&x!=b&&a1==0){
  14. a=x;
  15. a1++;
  16. }else if(x!=a&&x!=b){
  17. a1--;
  18. b1--;
  19. }else if(x==b){
  20. b1++;
  21. }
  22. }
  23. List<Integer>list=new ArrayList<>();
  24. a1=0;
  25. b1=0;
  26. for(int x:nums){
  27. if(x==a) a1++;
  28. else if(x==b) b1++;
  29. }
  30. int t=nums.length/3;
  31. if(a1>t){
  32. list.add(a);
  33. }
  34. if(b1>t){
  35. list.add(b);
  36. }
  37. return list;
  38. }
  39. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/932008
推荐阅读
相关标签
  

闽ICP备14008679号