面试题 17.10 主要元素

​​题目来源:

leetcode题目,网址:面试题 17.10. 主要元素 - 力扣(LeetCode)

解题思路:

首先,顺序遍历数组,将不同的数字消去,最后留下的数字若计数小于等于 0,则不存在主要元素。然后遍历数组,对最后留下的数字计数,判断其是否是主要元素。

解题代码:

复制代码
class Solution {
    public int majorityElement(int[] nums) {
        int res=0;
        int cnt=0;
        for(int num:nums){
            if(num==res){
                cnt++;
            }else{
                cnt--;
                if(cnt<0){
                    res=num;
                    cnt=1;
                }
            }
        }
        if(cnt<=0){
            return -1;
        }
        
        int count=0;
        for(int num:nums){
            if(num==res){
                count++;
            }
        }
        return count>nums.length/2?res:-1;
    }
}
复制代码

总结:

官方题解也是一样的思路。通过 Boyer-Moore 投票算法得到可能的主要元素或表名不存在主要元素,然后判断可能的主要元素是否是主要元素。


相关推荐
yuzhiboyouye3 小时前
com.fasterxml.jackson.annotation 里最常用高频的注解,可以按“控制字段、控制格式、控制结构、控制流程”来记
java·开发语言
苜蓿muxu4 小时前
简述 ConcurrentHashMap 和 CopyOnWriteArrayList 的区别以及各自适用场景
java·编程语言
9527!到!4 小时前
Springboot @value读取配置参数踩坑&推荐解决方案
java·spring boot·spring
十年Java程序媛4 小时前
Java 面试常问 this、super:构造方法调用顺序避坑
java·开发语言·spring boot·面试·个人开发
337804 小时前
5分钟搞懂Spring的IoC和Bean管理
java
学到老活到老4 小时前
类已经加载了,为什么静态代码还没执行?
java·jvm
学到老活到老4 小时前
写了 new,就一定会在堆上分配对象吗?
java·jvm
Web极客码4 小时前
决策模型 + LLM:用 Python 拆解浏览器自动化工作流
java·python·自动化
飞天小牛肉4 小时前
线程池明明没到最大线程数,为什么任务还在排队?
java
用户072367066604 小时前
用 Groovy 做动态 Mock:参数分支、造真数据、模拟异常
java·groovy