您的位置:首页 > 其它

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

2016-06-17 21:16 141 查看
分析:

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 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: