码迷,mamicode.com
首页 > 编程语言 > 详细

剑指offer之数组中出现次数超过一半的数字

时间:2019-09-03 22:03:11      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:more   一半   数字   title   思想   public   超过   question   ret   

题目描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
 

思路:

采用阵地攻守的思想:

第一个数字作为第一个士兵,守阵地;count = 1;
遇到相同元素,count++;


遇到不相同元素,即为敌人,同归于尽,count--;

当遇到count为0的情况,又以新的i值作为守阵地的士兵,继续下去,到最后还留在阵地上的士兵,有可能是主元素。
再加一次循环,记录这个士兵的个数看是否大于数组一般即可。

 

代码:

 1 public class Solution {
 2     public int MoreThanHalfNum_Solution(int [] array) {
 3         if(array == null || array.length == 0){
 4             return 0;
 5         }
 6         int count = 0;
 7         int num = array[0];
 8         for(int i = 0;i< array.length; i++){
 9             //如果count==0,将下一个值赋给num
10             if(count == 0 && (i+1)<array.length){
11                 num = array[i+1];
12             }
13             //如果遇见相同的元素,count++
14             if(num == array[i]){
15                 count = count + 1;
16             }else{    //如果遇见不相同的元素,count--
17                 count = count - 1;
18             }
19         }
20         //遍历num的个数
21         int number =  0;
22         for(int i = 0; i < array.length; i++){
23             if(array[i] == num){
24                 number++;
25             }
26         }
27         //判断num的个数是否大于数组长度的一半
28         if(number > array.length/2){
29             return num;
30         }else{
31             return 0;
32         }
33     }
34 }

 

剑指offer之数组中出现次数超过一半的数字

标签:more   一半   数字   title   思想   public   超过   question   ret   

原文地址:https://www.cnblogs.com/maohaitao/p/11455916.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!