【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个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
昨天学了三小时,但忘了打卡了,那就从头开始吧。[衰]day1 学习七小时学了mysql和tomcat底层
14
day5 今天学了四个小时,学了HttpServlerRequest和MySQL
11
day3学完HTTP协议复习了一些Javase的内容明天开始背面经
15
day2今天看完了Servlet,明天看HTTP。今天敲了敲坦克大战,想半天也实现不了,非得看课程。头疼。代码要还是敲了记忆才深刻,尤其是自己单独想通逻辑,然后不看视频就单独敲出来才能算初步学会,每天坚持,慢慢来吧
12
day1打卡今天主要看了韩顺平老师javaweb课程的Tomcat和Servlet的一小部分,前面的前端部分以前学过,就大概看了一下笔记复习了一下。今天感觉对tomcat和Servlet的理解有很大的提升,韩老师的课程很适合我。明天继续加油,明天应该看完Servlet差不多,这里自己第一次学就没学明白,明天就学明白Servlet就好,然后再练习一下SQL语句。
15
