牛客刷题——数组中出现次数超过一半的数字

输入n个整,输出出现次数大于等于数组长度一半 目:输入n个整,输出出现次数大于等于数组长度一半 输入描述: NOWCODER.COM 网·互联网名企笔试/面试出品-http://www.nowcoder.com 每个测试输入包含 n个空格分割的n个整,n不超过100,其中有一个出现次数大于等于n/2。 输出描述: 输出出现次数大于等于n/2的。 示例1: 输入 3 9 3 2 5 6 7 3 2 3 3 ... 阅读详情

数组中出现次数超过一半的数字

题目链接:数组中出现次数超过一半的数字

题目描述

给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。

数据范围:n≤50000,数组中元素的值 0 <= val <= 100000
要求:空间复杂度:O(1),时间复杂度 O(n)
输入描述:
保证数组输入非空,且保证有解

题目分析

方法1:
这里的数组是一个无序的数组,因此可以考虑先对数组进行排序,然后找到中间的数字,再次遍历这个数组,统计这个数字出现了多少次。如果出现次数超过数组长度的一半则满足条件。

方法2:
可以规定出现次数超过数组长度一半的那个数字,如果存在的话可以被称为众数,其他数字被称为非众数。规定:如果两个数不相等,就消去这两个数,那么最坏情况下,每次消去一个众数和一个非众数,如果存在众数,最后留下的数肯定是众数。这里在得到可能的众数以后需要再次进行遍历一遍,确认其出现次数是否超过一半。

代码实现

方法1:

    int MoreThanHalfNum_Solution(vector<int> numbers) {
    if(numbers.empty())
    {
        return 0;
    }
    sort(numbers.begin(),numbers.end());
    int count=0;
    int midNum=numbers[numbers.size()/2];
    for(size_t i=0;i<numbers.size();i++)
    {
        if(midNum == numbers[i])
        {
            count++;
        }
    }
    if(count>numbers.size()/2) 
    {
        return midNum;
    }
    else
    {
        return 0;
    }
    }

在这里插入图片描述

方法2:

    int MoreThanHalfNum_Solution(vector<int> numbers) {
    if(numbers.empty())
    {
        return 0;
    }
    int result = numbers[0];
    int times = 1;
    for(size_t i = 1;i<numbers.size();i++)
    {
        if(times != 0)
        {
            if(numbers[i]==result)
            {
                ++times;
            }
            else
            {
                --times;
            }
        }
        else
        {
            result = numbers[i];
            times=1;
        }
    }
    //遍历数组,判断result是否为众数
    int count = 0;
    for(size_t i=0;i<numbers.size();i++)
    {
        if(numbers[i]==result)
        {
            count++;
        }
    }
    if(count>numbers.size()/2)
    {
        return result;
    }
    else
    {
        return 0;
    }
    }

在这里插入图片描述

【每日一】day3_02 数组中出现次数超过一半数字 网:数组中出现次数超过一半数字 阅读详情

相关推荐

电赛2024年H智能小车基于MSPM0G3507主控MCU(利用8路灰度加上MPU6050的解决方式)

最后我觉得这个项目最重要的部分还是陀螺仪的精准度,如果一个陀螺仪的精准度高,这个项目就十分简单了,像mpu6050这种陀螺仪精准度就稍微差了一点,他有个最严重的问就是温漂,偏航角会随着温度变化为变化,这一点在跑发挥项一的时候十分关键的,因为这个只差基督就会导致车子跑偏,导致无法完成 整个项目。如果条件足够的话建议可以换一个好一点的陀螺仪,然后就是灰度如果没有条件同样也可以换成红外。以上就是本次项目的一些小建议。

weixin_60991529的博客 6202

【五种方法解决】找出数组中出现次数超过数组长度一半数字

剑指offerJZ28:数组中有一个数字出现的次数超过数组长度一半找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度一半,因此输出2。如果不存在则输出0。 这道是在面试时常问的一道,有多种解法,我们分别看一下; 方法一:利用map 利用map的key -value模型来存放arr[i]和相对应出现的次数,最后用次数去跟数组长度一半去比较,大于则就是;比如1,2,3,2,2,2,5,4,2;就是1出现一次、2出现5次、3.4.

chris__x的博客 1万+

基于深度学习的时间序列预测

深度学习在时间序列据中应用广泛,学术界已经有很多深度学习模型来适应不同领域的时间序列据集的多样性。那么到底有哪些基于深度学习的时间序列预测模型?他们的优缺点是什么?让我们一起来看一下。

Sharon0408的博客 6552

【面试数组中出现次数超过一半数字(三种解法详解)

描述 解法一:哈希表统计法 遍历数组 nums,用 HashMap 统计各数字出现的次数,最终超过数组长度一半数字则为要查找的结果。此方法时间和空间复杂度均为 O(N)。 Java class Solution { HashMap<Integer, Integer> map = new HashMap<> (); public int majorityElement(int[] nums) { if(nums.length == 0) retu

Mr_SCX的博客 2995

BM51 数组中出现次数超过一半数字

描述一个长度为 n 的数组数组中有一个数字出现的次数超过数组长度一半找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度一半,因此输出2。 据范围:n≤50000,数组中元素的值0≤val≤10000 要求:空间复杂度:O(1),时间复杂度 O(n) 输入描述:保证数组输入非空,且保证有解 示例1 输入:[1,2,3,2,2,2,5,4,2] 返回值:2 示例2 输入:[3,3,3,3,2,2,2] 返回值:3 示例3 输

zhinen丶的博客 1031

数组中出现次数超过一半数字

描述 数组中有一个数字出现的次数超过数组长度一半找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度一半,因此输出2。如果不存在则输出0。 解思路: 首先采用选择排序的思想,将数组中的进行排序,接下来寻找到数组中间的,再寻找这个数组中出现的次数,如果出现次数大于数组长度一半,则输出,否...

qq_40651109的博客 369

数组数组中出现次数超过一半数字

描述 数组中有一个数字出现的次数超过数组长度一半找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度一半,因此输出2。如果不存在则输出0。 链接: https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163?tpId=13&&tqId=11181&rp=1&ru=/ta/coding-interviews&q

YAYA776的博客 208

数组中出现次数超过一半数字

摩尔投票法:每次从序列里选择两个不相同的数字删除掉,最后剩下的就是主要元素(次数超过一半的元素)。在实际实现中,用一个变量。来保存候选主要元素,用一个器。

weixin_43785314的博客 117

Java实现----数组中出现次数超过一半数字

数组中有一个数字出现的次数超过数组长度一半找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度一半,因此输出2。如果不存在则输出0。 方法一:暴力遍历,时间复杂度为O(n2) public class Solution { public static void main(String[] args) { in...

lemonwen的博客 292

5】字符串中找出连续最长的数字串与数组中出现次数超过一半数字

文章目录一、目一1.目2.思路3.代码实现4.反思目二1.目2.思路思路一:代码实现:思路二:代码实现反思 一、目一 1.目 字符串中找出连续最长的数字串 2.思路 创建两个字符串空间,cur与ret,cur用来存储当前遍历字符串里面的数字,另一个ret用来存储最长的数字字符串 3.代码实现 import java.util.*; public class Main{ public static void main(String[]args){ Scanner sc

weixin_46913665的博客 882

剑指offer】:Python:28.数组中出现次数超过一半数字

数组中出现次数超过一半数字 时间限制:1秒 空间限制:32768K 热度指:310774 本知识点: 数组 算法知识视频讲解 描述 数组中有一个数字出现的次数超过数组长度一半找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度一半,因此输出2。如果不存在则输出0。 代码 # -*- coding:utf-8 -...

Jack_Kuo的博客 529

日记【数组中出现次数超过一半数字|数组中只出现一次的两个数字|缺失的第一个正整

因为a ^ b ^ c ^ b ^ c = a ,所以我们试着将整个数组拆分为两段,即满足a ^ b ^ c ^ b ^ c = a, e ^ b ^ c ^ b ^ c = e,这样就得到了两个不同的元素。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度一半,因此输出2。给一个长度为 n 的数组数组中有一个数字出现的次数超过数组长度一半找出这个数字。这次给的数组大小是1000000,用空间换时间会炸内存,所以用其他两种解法。

XiaoChe21的博客 231

算法数组中出现次数超过一半数字

算法练习~

qq_61862008的博客 737

算法的学习笔记—数组中出现次数超过一半数字(JZ39)

Boyer-Moore多投票算法在处理出现次数超过一半数字上,提供了一个非常高效的解决方案。它不仅满足了时间复杂度O(n)和空间复杂度O(1)的要求,而且通过一次遍历就能确定多元素,非常适合大规模据的处理。在今后的算法设计中,这种思想也可以应用到其他类似的场景中。😁热门专栏推荐想学习vue的可以看看这个java基础合集据库合集redis合集nginx合集linux合集手写机制微服务组件spring_尘觉springMVCmybits🤔欢迎大家加入我的社区尘觉社区。

业精于勤,荒于嬉 1401

JZ39-数组中出现次数超过一半数字

首先需要考虑数组是否为空的情况,然后对数组从前往后进行抵消,如果相同,计就+1,不同计就-1,接着计算最后剩下的数字在整个数组中出现的次数,最后判断这个出现的次数是否大于数组长度一半,是就返回值,否则返回0。首先对整个数组进行排序,然后计算中间数组的值,接着遍历整个数组,对目标值进行次数的统计,最后判断目标值出现的次数是否大于数组长度一半,是则返回值,否则返回0.例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。如果不存在则输出0。输入:[1,2,3,2,2,2,5,4,2]

sushang的博客 686

数组中出现次数超过一半数字

之路不停歇 ⌓‿⌓不积跬步无以至千里,不积小流无以成江海。

2401_84360682的博客 553

力扣】数组中出现次数超过一半数字

数组中出现次数超过一半数字

关关的博客 878

-数组中出现次数超过一半数字

📜个人简介 ⭐️个人主页:摸鱼の文酱博主页🙋‍♂️ 🍑博领域:java编程基础,mysql 🍅写作风格:干货,干货,还是tmd的干货 🌸精选专栏:【Java】【mysql】 【算法笔记】 🎯博主的码云gitee,平常博主写的程序代码都在里面。 🚀支持博主:点赞👍、收藏⭐、留言💬 🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢! 文章目录原链接目要求 原链接 数组中出现次数超过一半数字 目要求    ...

qq_53947552的博客 1277

_数组中出现次数超过一半数组长度的元素

描述 数组中有一个数字出现的次数超过数组长度一半找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度一半,因此输出2。如果不存在则输出0。 思路: 采用使用hashmap的方式,其中一个作为接收数组元素的标识,另一个作为该元素出现的次数 可以直接在hashmap中判断元素是否超过长度一半,不需要再次遍历...

zhangvalue的博客 735

剑指Offer_编程_数组中出现次数超过一半数字

描述 数组中有一个数字出现的次数超过数组长度一半找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度一半,因此输出2。如果不存在则输出0 方法一 先利用sort函排序,从第一个元素查找到中间元素,如果存在相隔数组长度一半及以上位置的元素相等的话(好难描述…),判定成功,返回该元素。这个方法操作比较麻烦,需要考虑数组...

JY_WD的博客 2766

PCB板缺陷检测据集-voc.rar

PCB板缺陷检测据集,几百张图像,标签为VOC格式,可以直接使用

上一篇: 牛客刷题——字符串中找出连续最长的数字串
下一篇: 多态——抽象类
HHYX.
博客等级 码龄6年 22粉丝 114原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值