LeetCode169 多数元素

题目

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入:[3,2,3]
输出:3
示例 2:

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


进阶:

尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

方法

哈希法

class Solution {
    public int majorityElement(int[] nums) {
        Map<Integer,Integer> map = new HashMap<>();
        int length = nums.length;
        if(nums==null||length==0){
            return 0;
        }
        if(length==1){
            return nums[0];
        }
        int res = 0;
        for(int num:nums){
            if(map.containsKey(num)){
                map.put(num,map.get(num)+1);
                if(map.get(num)>length/2){
                    res = num;
                    break;
                }

            }else{
                map.put(num,1);
            }
        }
        return res;
    }
}

排序法

class Solution {
    public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        int len = nums.length;
        return nums[len/2];
    }
}

分治法

投票法

class Solution {
    public int majorityElement(int[] nums) {
        if(nums==null||nums.length==0){
            return 0;
        }
        int currentNum = nums[0];
        int count = 0;
        for(int num:nums){
            if(count==0){
                currentNum = num;
                count = 1;
            }else{
                if(currentNum==num){
                    count++;
                }else{
                    count--;
                }
            }
        }
        return currentNum;
    }
}
posted @   你也要来一颗长颈鹿吗  阅读(23)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示