首页 > 其他分享 >【剑指 Offer】 39. 数组中出现次数超过一半的数字

【剑指 Offer】 39. 数组中出现次数超过一半的数字

时间:2023-04-13 09:55:05浏览次数:47  
标签:39 shu Offer int 假设 数组 众数 数是

【题目】

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

 

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

 

示例 1:

输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2

 

限制:

1 <= 数组长度 <= 50000

 

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof

【思路】

遍历数组,假定当前数是众数,向下搜索,如果遇到相同的数就+1,如果遇到不同的数就-1,如果累计是0就排除,最后假设为众数的数且未被排除的数就是众数

原因:如果是假设的数是众数最后为0,那么一定抵消了和众数相同个数的非众数,众数不变;如果假设的数是非众数最后为0,那么一定抵消了众数或其他非众数,对众数也没有影响。

 

【代码】

class Solution {
    public int majorityElement(int[] nums) {
        int x = 0;
        int vote=0;
        // 遍历数组,假设当前数是众数,向下搜索相同则+1,不同则-1,如果为0,则一定抵消了偶数个非众数,或同等数量的众数和非众数,对众数没有影响,最后剩下的数就是众数
        for(int num:nums){
            if(vote==0) x=num;
            vote+= x==num?1:-1;
        }
        return x;
    }
}

 

标签:39,shu,Offer,int,假设,数组,众数,数是
From: https://www.cnblogs.com/End1ess/p/17312298.html

相关文章

  • 【剑指 Offer】 56 - II. 数组中数字出现的次数 II
    【题目】在一个数组nums中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例1:输入:nums=[3,4,3,3]输出:4示例2:输入:nums=[9,1,7,9,7,9,7]输出:1 限制:   1<=nums.length<=10000   1<=nums[i]<2^31 来源:力扣(LeetCode)链接:http......
  • JavaScript 数组字符串转换Json格式
    JavaScript数组字符串转换Json格式//滔Roy2023.04.13functionparseStringToArray(str){//尝试将字符串解析为JSON格式try{constarr=JSON.parse(str);//如果解析成功,则直接返回解析结果if(Array.isArray(arr)){returnarr;}}......
  • 同样的文件用'du'、'ls -l'与'ls -s'查看大小不同
    清空文件的几种方式>access.logcat/dev/null>access.logddif=/dev/nullof=access.logddif=/dev/zeroof-access.logbs=1024count=2为什么同样的文件在不同的文件系统中大小不一样?'du'、'ls-l'与'ls-s'的区别辨析磁盘告警之---神奇的魔法(Sparsefile)......
  • 学习笔记397—Docker数据管理
    Docker有两种数据管理的方式数据卷:容器内数据直接映射到本地主机环境;数据卷容器:使用特定容器维护数据卷.数据卷数据卷是一个可供容器使用的特殊==目录==,它将主机操作系统目录直接映射进容器数据卷的特性:可以在容器之间共享和重用,容器间传递数据将变得高效与方......
  • js数组方法之数组变异方法
    push、pop、unshift、shift、sort、splice、reverse以上这些方法都会改变原数组并且这些方法的返回值是值得注意的有时候可以提高工作效率,比如pop方法的返回值是该元素(删去的第一个)其他的都不多说了,还有一些非变异方法了解一下filter()//过滤数组中某些元素,返回符合条件的......
  • 力扣---剑指 Offer 39. 数组中出现次数超过一半的数字
    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[1,2,3,2,2,2,5,4,2]输出:2 限制:1<=数组长度<=50000注意:本题与主站169题相同:https://leetcode-cn.com/problems/majority-el......
  • java -- 二维数组
    基本概念在Java中二维数组被看作数组的数组,即二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。Java并不直接支持二维数组,但是允许定义数组元素是一维数组的一维数组,以达到同样的效果。创建及初始化//创建方式和数组相似第一个中括号表示行,第二个中括号表示列//......
  • 数组的劫持
    数组的劫持>1.数组劫持的思路>>对于数组劫持的目标是实现数组的响应式:>>-在Vue中,我们很少会使用索引进行操作数组,并且认为有七个方法能够改变数组:>>push、pop、splice、unshift、reverse,sort。所以,需要对七个方法进行特殊处理,是他们能够劫持到数组的数据......
  • C# Byte数组转化String详解(c# byte转化为string)
    C#Byte数组转化String详解(c#byte转化为string)原文链接:https://www.zhiu.cn/148955.htmlC#编程过程中将Byte数组转化String是咱们常常碰到的问题,那么怎么处理C#Byte数组转化String呢?那么咱们来看看详细的涉及到的办法以及关于怎么处理C#Byte数组转化String的评论。FCL得许多......
  • JS 根据key查找对象数组中符合的一项 返回对象(递归)
    在一个复杂的数组对象数据中(嵌套多层),通过key值返回对应的对象1方法:parseJson(jsonObj,key,value){//循环所有键letarray=[]for(letvinjsonObj){letelement=jsonObj[v]//1.判断是对象或者数组if(typeof(ele......