【MarsCode】每日一题 之找出整型数组中占比超过一半的数字
找出整型数组中占比超过一半的数字
1.问题描述
小R从班级中抽取了一些同学,每位同学都会给出一个数字。已知在这些数字中,某个数字的出现次数超过了数字总数的一半。现在需要你帮助小R找到这个数字。
测试样例
样例1:
输入:
array = [1, 3, 8, 2, 3, 1, 3, 3, 3]输出:3
样例2:
输入:
array = [5, 5, 5, 1, 2, 5, 5]输出:5
样例3:
输入:
array = [9, 9, 9, 9, 8, 9, 8, 8]输出:9
2.思路与题解
-
理解问题:我们需要找到数组中出现次数超过一半的数字。
-
数据结构选择:由于我们只需要找到一个数字,不需要额外的数据结构。
-
算法步骤
:
-
初始化两个变量:
candidate用于存储当前候选数字,count用于记录当前候选数字的计数。 -
遍历数组中的每个元素:
-
如果
count为 0,将当前元素设为candidate,并将count设为 1。 -
如果当前元素与
candidate相同,增加count。 -
如果当前元素与
candidate不同,减少count。
-
-
最终
candidate就是我们要找的数字。
-
2.4代码框架
Java
▼java复制代码public class Main { public static int solution(int[] array) { // Edit your code here int candidate = 0; int count = 0; for(int num : array){ if (count ==0) { candidate=num; } if (num== candidate) { count++; }else{ count--; } } return candidate; } public static void main(String[] args) { // Add your test cases here System.out.println(solution(new int[]{1, 3, 8, 2, 3, 1, 3, 3, 3}) == 3); } }
C++
▼c++复制代码
Python
▼python复制代码
Golang
▼go复制代码
2.5一些疑难的代码解释
candidate和count用于跟踪当前的候选数字和其计数。- 遍历数组时,根据当前元素更新
candidate和count。 - 最终
candidate就是出现次数超过一半的数字。
3.欢迎大佬们关注或莅临本渣的一些个人website
gitee: https://gitee.com/xiao-chenago github:https://github.com/cool-icu0 语雀:https://www.yuque.com/icu0 csdn:https://cool-icu.blog.csdn.net/
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
Day 12✅ 今天做了:vue前端, 了解vue - Nginx - springboot关系⏰ 明天计划:继续搞前端的功能实现
4
🚩JavaD121、某个接口有10个抽象方法和100个具体的实现类,考虑到接口后期可能需要增加方法,设计接口时,通过中间的一个抽象类(适配器抽象类)默认实现或空实现接口(都是使用普通方法),然后具体的100个子类覆写自己想要的方法。后期接口增加方法时,给适配器抽象类增加一个普通方法,第101个具体子类再覆写适配器抽象类的第101个方法。2、抽象方法可以声明为static,错,因为static方法
2
🚩JavaD131、抽象类、继承、多态、接口、内部类,单独每一章节能懂,综合后就似懂非懂2、每一章节重复看视频,还是懂,做综合题,这一遍刷题是对的,再接着刷题是错的。3、死板的知识适合我,灵活的不适合。4、五大山头压着都懵圈了,看来还要多花时间在这五大山头
3
Day 13✅ 今天做了:Vue表单搜索, 搜索栏布局⏰ 明天计划:继续学前端
2
今天学了Python基础之:①数据类型和变量:五大数据类型以及变量常量②字符串与编码:字符编码以及Python中的字符串、编解码、格式化
1
