(LeetCode 面试经典 150 题) 169. 多数元素(哈希表 || 二分查找)

题目:169. 多数元素

方法一:二分法,最坏的时间复杂度0(nlogn),但平均0(n)即可。空间复杂度为0(1)。

C++版本:

cpp 复制代码
int n=nums.size();
        int l=0,r=n-1;
        while(l<r){
            int mid=(l+r)/2;
            int ans=0;
            for(auto x:nums){
                if(x==nums[mid]) ans++;
            }
            if(ans>n/2) break;
            else l=mid+1;
        }
        return nums[(l+r)/2];

JAVA版本:

java 复制代码
class Solution {
    public int majorityElement(int[] nums) {
        int n=nums.length;
        int l=0,r=n-1;
        while(l<r){
            int mid=(l+r)/2;
            int ans=0;
            for(var x:nums){
                if(x==nums[mid]) ans++;
            }
            if(ans>n/2) break;
            else l=mid+1;
        }
        return nums[(l+r)/2];
    }
}

Go版本:

go 复制代码
func majorityElement(nums []int) int {
    n:=len(nums)
    l,r:=0,n-1
    for l<r {
        mid:=(l+r)/2
        ans:=0
        for _,x:=range nums {
            if nums[mid]==x {
                ans++
            }
        }
        if ans>n/2 {
            break
        }else{
            l=mid+1
        }
    }
    return nums[(l+r)/2]
}

方法二:哈希表,时间复杂度0(n),空间复杂度0(n)。

C++版本:

cpp 复制代码
class Solution {
public:
    int majorityElement(vector<int>& nums) {
        unordered_map<int,int> mp;
        int n=nums.size();
        int res=0;
        for(auto x:nums){
            mp[x]++;
            if(mp[x]>n/2){
                res=x;
                break;
            }
        }
        return res;
    }
};

JAVA版本:

java 复制代码
class Solution {
    public int majorityElement(int[] nums) {
        Map<Integer,Integer> mp = new HashMap<>();
        int n=nums.length;
        int res=0;
        for(var x:nums){
            mp.put(x,mp.getOrDefault(x,0)+1);
            if(mp.get(x)>n/2){
                res=x;
                break;
            }
        }
        return res;
    }
}

Go版本:

go 复制代码
func majorityElement(nums []int) int {
    n:=len(nums)
    mp:=make(map[int]int)
    res:=0
    for _,x:=range nums {
        mp[x]++
        if mp[x]>n/2 {
            res=x
            break
        }
    }
    return res
}
相关推荐
weixin_460443562 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
海鸥-w5 小时前
什么是AOP
java
Cc.Y5 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
启观川5 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸5 小时前
排序算法介绍
python·算法·排序算法
paopaokaka_luck5 小时前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
sm_926787055 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
阿森_dev5 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
by209995 小时前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
Sarvartha5 小时前
Lambda 表达式和函数式接口
java·开发语言