LeetCode 169. 多数元素

题目简述:找到一个数组中的“多数元素”,即在数组中出现次数大于数组长度一半的元素。假设数组总是非空的,并且给定的数组总是存在多数元素。

1. 哈希法

1.1原理

利用哈希表来记录每个元素出现的次数。

  1. 遍历整个数组,对每个元素进行计数,使用哈希表记录每个元素出现的次数。
  2. 接着遍历哈希表中的每个元素,寻找出现次数大于数组长度一半的元素。

1.2 代码

public int majorityElement(int[] nums) {
    Map<Integer,Integer> counts = new HashMap<>();
    int maxNum = 0;
    int maxCount = 0;
    for (int i:nums){
        int count = counts.getOrDefault(i,0) + 1;
        counts.put(i,count);

        if (count>maxCount){
            maxNum = i;
            maxCount = count;
        }
    }
    return maxNum;
}

2. 摩尔投票法

2.1 原理

摩尔投票法是一种巧妙的解决方法,其核心思想是利用元素的抵消。

  1. 将数组的第一个元素作为候选人,初始票数为1。
  2. 遍历数组,对于遇到的每个元素:
    • 如果当前元素与候选人相同,则票数加1;
    • 如果当前元素与候选人不同,则票数减1。
  3. 当票数减至0时,更换候选人为当前元素,并将票数重置为1。
  4. 遍历完数组后,最终的候选人即为多数元素。

2.2 为何摩尔投票法可行

摩尔投票法之所以可行,是因为多数元素的个数大于数组长度的一半。在遍历数组时,每次遇到不同的元素时,它们两两相互抵消,而多数元素仍然会保留在最终的候选人中。

2.3 代码

public int majorityElement(int[] nums) {
    int candidate = nums[0];
    int count = 1;
    for (int i = 1; i < nums.length; i++) {
        if (nums[i] == candidate) {
            count++;
        } else {
            count--;
            if (count == 0) {
                candidate = nums[i];
                count = 1;
            }
        }
    }
    return candidate;
}

简化写法

public int majorityElement(int[] nums) {
    int candidate = -1;
    int count = 0;
    for (int num : nums) {
        if (count == 0) {
            candidate = num;
        }
        count += (candidate == num) ? 1 : -1;
    }
    return candidate;
}

相关推荐

  1. [leetcode] 169. 多数元素

    2024-04-08 16:16:01       34 阅读
  2. leetcode 169.多数元素

    2024-04-08 16:16:01       51 阅读
  3. LeetCode 169. 多数元素

    2024-04-08 16:16:01       10 阅读
  4. leetcode-169-多数元素

    2024-04-08 16:16:01       8 阅读
  5. 多数元素算法(leetcode169题)

    2024-04-08 16:16:01       35 阅读
  6. LeetCode169.多数元素(哈希表)

    2024-04-08 16:16:01       40 阅读
  7. 169.多数元素

    2024-04-08 16:16:01       20 阅读
  8. 169. 多数元素

    2024-04-08 16:16:01       9 阅读
  9. Leetcode 《面试经典150题》169. 多数元素

    2024-04-08 16:16:01       28 阅读
  10. Leetcode面试经典150_Q169多数元素

    2024-04-08 16:16:01       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 16:16:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 16:16:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 16:16:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 16:16:01       20 阅读

热门阅读

  1. 什么是灰度发布

    2024-04-08 16:16:01       14 阅读
  2. 【Vue】 Vue项目中的跨域配置指南

    2024-04-08 16:16:01       12 阅读
  3. 富格林:打击暗箱黑幕正常出金

    2024-04-08 16:16:01       14 阅读
  4. C++ STL中Queue和Stack的用法

    2024-04-08 16:16:01       13 阅读
  5. ElasticSearch 常用查询优化方式

    2024-04-08 16:16:01       11 阅读
  6. Nginx基础(03)

    2024-04-08 16:16:01       14 阅读
  7. 顺序表(C语言)

    2024-04-08 16:16:01       12 阅读
  8. 室内设计专业MR混合现实情景实训教学系统应用

    2024-04-08 16:16:01       12 阅读