热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数组中出现次数超过一半的数字:挑战程序员同学

本文主要介绍关于算法,数据结构,c++的知识点,对【数组中出现次数超过一半的数字】和【挑战程序员同学】有兴趣的朋友可以看下由【安河桥畔】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的每日一题相关

本文主要介绍关于算法,数据结构,c++的知识点,对【数组中出现次数超过一半的数字】和【挑战程序员同学】有兴趣的朋友可以看下由【安河桥畔】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的每日一题相关技术问题。

挑战程序员同学

数组中出现次数超过一半的数字 题目来源

牛客网:数组中出现次数超过一半的数字

题目描述

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

数据范围:n≤50000,数组中元素的值 0≤val≤10000
要求:空间复杂度:O(1),时间复杂度 O(n)

输入描述

输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)
第二行包括3*n个整数a_i(1 ≤ a_i ≤ 10^9),表示每个参赛选手的水平值.

示例1

输入

[1,2,3,2,2,2,5,4,2]

返回值

2

示例2

输入

[3,3,3,3,2,2,2]

返回值

3

示例3

输入

[1]

返回值

1

思路分析 解法一 抵消法如果两个数不相等,就消去这两个数,最坏情况下,每次消去一个众数和一个非众数,那么如果存在众数,最后留下的数肯定是众数定义一个ret保存当前的众数,定义times表示其出现的次数遍历数组,当前数组值与ret相等则增加times值,不相等则减小times值,times值为0时用当前数组元素的值替换ret 解法二 对数组进行排序找数组中间的数,因为一个数如果在数组中存在次数超过一半,则排序后数组中间的数一定是这个数 代码展示 解法一
class Solution {
   
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
   
        int times = 1;
        int ret = numbers[0];//定义ret为数组第一个元素,如果数组只有一个元素,可以直接返回ret
        int sz = numbers.size();
        for (int i = 1; i < sz; i++)
        {
   
            //当前times值为非0
            if (times != 0)
            {
   
                if (numbers[i] != ret)
                {
   
                    times--;
                }
                else
                {
   
                    times++;
                }
            }

            //当前times值为0,原来的ret已经被不相等的值抵消
            else
            {
   
                //把当前数组的值赋值给ret,tims重新置为1
                ret = numbers[i];
                times = 1;
            }
        }
        return ret;
    }
};
解法二
class Solution {
   
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
   
        sort(numbers.begin(),numbers.end());
        int sz=numbers.size();
        int max=numbers[sz/2];//数组的中间数
        return max;
    }
};

暑期编程PK赛

得CSDN机械键盘等精美礼品!

本文《数组中出现次数超过一半的数字》版权归安河桥畔所有,引用数组中出现次数超过一半的数字需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Igotthiscode(IknowitsinSpanishIcantranslateifneeded)wheretheygivemethefunctionS ... [详细]
  • 如何用Vscode和 Visual stdudio配置C++环境
    这篇文章主要讲解了“如何用Vscode和Visualstdudio配置C++环境”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深 ... [详细]
  • 给定一个二维平面上的一些点,通过计算曼哈顿距离,求连接所有点的最小总费用。只有任意两点之间有且仅有一条简单路径时,才认为所有点都已连接。给出了几个示例并给出了对应的输出。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
author-avatar
子华2502924833
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有