LeetCode(剑指 Offer)- 39. 数组中出现次数超过一半的数字

Posted 放羊的牧码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode(剑指 Offer)- 39. 数组中出现次数超过一半的数字相关的知识,希望对你有一定的参考价值。

题目链接:点击打开链接

题目大意:

解题思路

相关企业

  • 亚马逊
  • 谷歌(Google)
  • 微软(Microsoft)
  • 苹果(Apple)
  • Facebook
  • 字节跳动

AC 代码

  • Java
// 解决方案(1)
class Solution 
    public int majorityElement(int[] nums) 
		Map<Integer, Integer> map = new HashMap<>();
		for (int num : nums) 
			map.put(num, map.getOrDefault(num, 0) + 1);
			if (map.get(num) > nums.length / 2) 
				return num;
			
		
		return -1;
	


// 解决方案(2)
class Solution 
    public int majorityElement(int[] nums) 
        int x = 0, votes = 0, count = 0;
        for(int num : nums)
            if(votes == 0) x = num;
            votes += num == x ? 1 : -1;
        
        // 验证 x 是否为众数
        for(int num : nums)
            if(num == x) count++;
        return count > nums.length / 2 ? x : 0; // 当无众数时返回 0
    
  • C++
class Solution 
public:
    int majorityElement(vector<int>& nums) 
        int x = 0, votes = 0, count = 0;
        for(int num : nums)
            if(votes == 0) x = num;
            votes += num == x ? 1 : -1;
        
        // 验证 x 是否为众数
        for(int num : nums)
            if(num == x) count++;
        return count > nums.size() / 2 ? x : 0; // 当无众数时返回 0
    
;

以上是关于LeetCode(剑指 Offer)- 39. 数组中出现次数超过一半的数字的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode(剑指 Offer)- 39. 数组中出现次数超过一半的数字

LeetCode(剑指 Offer)- 39. 数组中出现次数超过一半的数字

总结leetcode剑指offer分类学习速成

LeetCode692. 前K个高频单词 / 剑指 Offer 50. 第一个只出现一次的字符 / 剑指 Offer 51. 数组中的逆序对 / 2. 两数相加

LeetCode(剑指 Offer)- 20. 表示数值的字符串

[LeetCode]剑指 Offer 49. 丑数