数组中出现次数超过一半的数字
题:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
思路:首先看到这个题目,数组中一个数字出现的次数超过数组长度的一半,也就意味着这个数字出现的次数比数组中其它数字出现次数的总和还多。我们在遍历的数组的时候可以用两个值来记录,一个是数组出现的次数count,一个用来保存它的结果result,我们把数组的第一个数arr[0]作为结果保存跟下一个数字比较,count记为1,如果下一个数字跟之前保存的数字相同count+1,如果跟之前保存的数字不同,则count-1。如果次数为0,我们需要保存它的下一个数字,并且将次数设为1。因为要找的数字出现的次数超过数组长度长度的一半,所以最后一次设为1的数字就是我们要找的数字。
代码:
#include<iostream>usingnamespacestd;intSerach(intarr[],intlen){intcount=1;intresult=arr[0];for(inti=1;i<len;i++){if(count==0){result=arr[i];count=1;}elseif(result==arr[i])count++;elsecount--;}returnresult;}intmain(){intarr[]={1,2,3,2,2,2,5,4,2};intsz=sizeof(arr)/sizeof(arr[0]);intret=Serach(arr,sz);cout<<ret<<endl;return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。