qidao123.com技术社区-IT企服评测·应用市场

标题: LeetCode 经典题:“多数元素” [打印本页]

作者: 梦见你的名字    时间: 2025-5-11 01:37
标题: LeetCode 经典题:“多数元素”
解锁 LeetCode 简朴题:“多数元素”的多解之道

一、题目形貌

给定一个大小为 n 的数组 nums ,返回此中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例


二、解题思路与多方法实现

方法一:哈希表统计法

思路

使用哈希表来统计数组中每个元素出现的次数。遍历数组,对于每个元素,若它已经在哈希表中,就将其对应的计数加 1;若不在哈希表中,就将其加入哈希表并将计数初始化为 1。最后遍历哈希表,找出计数大于 ⌊ n/2 ⌋ 的元素。
代码实现(Java)

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. public class MajorityElement {
  4.     public int majorityElement(int[] nums) {
  5.         Map<Integer, Integer> countMap = new HashMap<>();
  6.         int n = nums.length;
  7.         // 统计每个元素的出现次数
  8.         for (int num : nums) {
  9.             countMap.put(num, countMap.getOrDefault(num, 0) + 1);
  10.         }
  11.         // 找出多数元素
  12.         for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
  13.             if (entry.getValue() > n / 2) {
  14.                 return entry.getKey();
  15.             }
  16.         }
  17.         return -1; // 根据题目假设,这里不会执行到
  18.     }
  19. }
复制代码
代码解释

方法二:排序法

思路

由于多数元素出现的次数大于 ⌊ n/2 ⌋,那么在对数组举行排序后,数组中间位置的元素一定是多数元素。
代码实现(Java)

  1. import java.util.Arrays;
  2. public class MajorityElementSort {
  3.     public int majorityElement(int[] nums) {
  4.         Arrays.sort(nums);
  5.         return nums[nums.length / 2];
  6.     }
  7. }
复制代码
代码解释

方法三:摩尔投票法

思路

摩尔投票法的核心头脑是使用多数元素出现次数多于其他元素出现次数总和的特性。我们可以维护一个候选多数元素 candidate 和一个计数 count。遍历数组,当 count 为 0 时,将当前元素设为候选多数元素;若当前元素与候选多数元素相同,则 count 加 1,否则 count 减 1。最后剩下的候选多数元素就是真正的多数元素。
代码实现(Java)

  1. public class MajorityElementBoyerMoore {
  2.     public int majorityElement(int[] nums) {
  3.         int candidate = nums[0];
  4.         int count = 1;
  5.         // 投票过程
  6.         for (int i = 1; i < nums.length; i++) {
  7.             if (nums[i] == candidate) {
  8.                 count++;
  9.             } else {
  10.                 count--;
  11.                 if (count == 0) {
  12.                     candidate = nums[i];
  13.                     count = 1;
  14.                 }
  15.             }
  16.         }
  17.         return candidate;
  18.     }
  19. }
复制代码
代码解释

三、复杂度分析

时间复杂度


空间复杂度


四、总结

“多数元素”这道简朴题为我们展示了不同的算法思路和数据布局的应用。哈希表统计法直观易懂,使用哈希表的特性举行元素计数;排序法巧妙地使用了多数元素在排序后数组中的位置特点;摩尔投票法则以其高效的时间和空间复杂度脱颖而出,是办理此类问题的最优解。通过对这道题的多种解法的学习,我们可以在面临不同场景时,根据时间和空间的要求选择最合适的算法。希望大家在以后的算法学习中,能够灵活运用这些方法,提升自己的解题能力。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4