题:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
思路:首先看到这个题目,数组中一个数字出现的次数超过数组长度的一半,也就意味着这个数字出现的次数比数组中其它数字出现次数的总和还多。我们在遍历的数组的时候可以用两个值来记录,一个是数组出现的次数count,一个用来保存它的结果result,我们把数组的第一个数arr[0]作为结果保存跟下一个数字比较,count记为1,如果下一个数字跟之前保存的数字相同count+1,如果跟之前保存的数字不同,则count-1。如果次数为0,我们需要保存它的下一个数字,并且将次数设为1。因为要找的数字出现的次数超过数组长度长度的一半,所以最后一次设为1的数字就是我们要找的数字。
代码:
#include <iostream> using namespace std; int Serach(int arr[],int len) { int count=1; int result=arr[0]; for(int i=1;i<len;i++) { if(count==0) { result=arr[i]; count=1; } else if(result == arr[i]) count++; else count--; } return result; } int main() { int arr[]={1,2,3,2,2,2,5,4,2}; int sz=sizeof(arr)/sizeof(arr[0]); int ret=Serach(arr,sz); cout<<ret<<endl; return 0; }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前文章:数组中出现次数超过一半的数字-创新互联
分享路径:https://www.cdcxhl.com/article38/dohhpp.html
成都网站建设公司_创新互联,为您提供网站制作、商城网站、全网营销推广、App设计、面包屑导航、动态网站
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联