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

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

示例 1:

复制代码
输入:nums = [3,2,3]
输出:[3]

示例 2:

复制代码
输入:nums = [1]
输出:[1]

示例 3:

复制代码
输入:nums = [1,2]
输出:[1,2]

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

java 复制代码
class Solution {
    public List<Integer> majorityElement(int[] nums) {
        Map<Integer,Integer>map=new HashMap<>();
        for(int x:nums){
            map.put(x,map.getOrDefault(x,0)+1);
        }
        int n=nums.length;
        int t=n/3;
        List<Integer> list=new ArrayList<>();
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if(entry.getValue()>t){
                list.add(entry.getKey());
            }
        }

        return list;
    }
}

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

java 复制代码
class Solution {
    public List<Integer> majorityElement(int[] nums) {
      int a=nums[0];
      int a1=0;
      int b=nums[0];
      int b1=0;

      for(int x:nums){
          if(x==a){
              a1++;
          }else if(x!=a&&x!=b&&b1==0){
              b=x;
              b1++;
          }else if(x!=a&&x!=b&&a1==0){
              a=x;
              a1++;
          }else if(x!=a&&x!=b){
              a1--;
              b1--;
          }else if(x==b){
              b1++;
          }

      }
      List<Integer>list=new ArrayList<>();
      a1=0;
      b1=0;
      for(int x:nums){
          if(x==a) a1++;
          else if(x==b) b1++;
      }
      int t=nums.length/3;
      if(a1>t){
          list.add(a);
      }
      if(b1>t){
          list.add(b);
      }
      return list;
    }
}
相关推荐
小程故事多_8022 分钟前
破局 LLM 黑盒困局,Phoenix 凭全链路可观测,重构大模型应用工程化落地规则
java·前端·人工智能·重构·aigc
Anastasiozzzz1 小时前
MySQL JOIN:底层原理、算法演进与多表性能之谜
算法
追随者永远是胜利者7 小时前
(LeetCode-Hot100)253. 会议室 II
java·算法·leetcode·go
Jason_Honey28 小时前
【平安Agent算法岗面试-二面】
人工智能·算法·面试
程序员酥皮蛋8 小时前
hot 100 第三十五题 35.二叉树的中序遍历
数据结构·算法·leetcode
追随者永远是胜利者8 小时前
(LeetCode-Hot100)207. 课程表
java·算法·leetcode·go
仰泳的熊猫9 小时前
题目1535:蓝桥杯算法提高VIP-最小乘积(提高型)
数据结构·c++·算法·蓝桥杯
那起舞的日子9 小时前
动态规划-Dynamic Programing-DP
算法·动态规划
yanghuashuiyue10 小时前
lambda+sealed+record
java·开发语言
闻缺陷则喜何志丹10 小时前
【前后缀分解】P9255 [PA 2022] Podwyżki|普及+
数据结构·c++·算法·前后缀分解