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

来源:互联网 发布:淘宝手机排名突然没了 编辑:程序博客网 时间:2024/06/16 03:31

题目描述

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

分类:数组

解法1:使用快速排序的过程,直到找到中间位置,返回即可
[java] view plain copy
  1. public class Solution {  
  2.     public int MoreThanHalfNum_Solution(int [] array) {   
  3.         if(array.length==0return 0;   
  4.         int low = 0;  
  5.         int high = array.length-1;  
  6.         int mid = (low+high)/2;  
  7.         int index = partition(array, 0, high);  
  8.           
  9.         while(index!=mid){  
  10.             if(index<mid){                 
  11.                 index = partition(array, index+1, high);                  
  12.             }else{  
  13.                 index = partition(array, low, index-1);  
  14.             }  
  15.         }  
  16.         int count = 0;  
  17.         for(int i=0;i<=high;i++){  
  18.             if(array[i]==array[mid]) count++;  
  19.         }  
  20.         if(count<=(high+1)/2){  
  21.             return 0;   
  22.         }  
  23.         return array[mid];  
  24.     }         
  25.       
  26.     public int partition(int [] array,int low,int high){  
  27.         int temp = array[low];  
  28.         while(low<high){  
  29.             while(low<high && array[high]>=temp){  
  30.                 high--;  
  31.             }  
  32.             array[low] = array[high];  
  33.             while(low<high && array[low]<=temp){  
  34.                 low++;  
  35.             }  
  36.             array[high] = array[low];  
  37.         }  
  38.         array[low] = temp;  
  39.         return low;  
  40.     }  
  41. }  


原文链接  http://blog.csdn.net/crazy__chen/article/details/45002439

阅读全文
0 0