数组中出现次数超过一半的数

来源:互联网 发布:电影同声传译软件 编辑:程序博客网 时间:2024/05/14 20:55


分析:

6//找出在一个数组中出现次数超过一半的数,可以这样理解,找一个数的中位数

  7 //基于这样思想最直观的做法是排序后找中间的数既可,但最好时间复杂度也得O(NlogN)
  8 //所以用一种简单的办法来解决
  9 //定义两个变量,从第一个数开始找,并记录第一个数为result为需要找的数,它出现的次数初始化为:times=1
 10 //以后只要找到和result相等的数rimes++,否则times--

 11 //当times等于0的时候,改变result等于当前指向的数,继续找

                                                                                                                       2 #include <iostream>  3 #include <assert.h>  4 using namespace std;  5   6 //找出在一个数组中出现次数超过一半的数,可以这样理解,找一个数的中位数  7 //基于这样思想最直观的做法是排序后找中间的数既可,但最好时间复杂度也得O(NlogN)  8 //所以用一种简单的办法来解决  9 //定义两个变量,从第一个数开始找,并记录第一个数为result为需要找的数,它出现的次数初始化为:times=1 10 //以后只要找到和result相等的数rimes++,否则times-- 11 //当times等于0的时候,改变result等于当前指向的数,继续找 12 int find(int *arr,int len) 13 { 14         assert(arr !=NULL); 15         assert(len >0); 16         int result=arr[0]; 17         int times=1; 18         for(int i=1; i<len; ++i) 19         { 20                 if(times==0) 21                 { 22                         result=arr[i]; 23                         times=1; 24                 }else if(result==arr[i]) 25                         times++; 26                 else 27                         times--; 28         } 29         return result; 30 } 31 int main() 32 { 33         int arr[]={1,2,3,2,2,2,5,4,2}; 34         //int arr[]={5,5,1,2,5,2,5,6,5}; 35         int len=sizeof(arr)/sizeof(*arr); 36  37         int key=find(arr,len); 38         cout<<"出现次数最多的数:"<<key<<endl; 39         return 0; 40 }                                                                                                                                                                                          



1 0
原创粉丝点击