加强版水王:找出出现次数刚好是一半的数字
来源:互联网 发布:js touchend 坐标 编辑:程序博客网 时间:2024/04/28 12:45
本文节选自:http://blog.csdn.net/v_july_v/article/details/6890054
加强版水王:找出出现次数刚好是一半的数字
1.用了两个变量来记录水王。
#include<iostream> using namespace std; int Find(int* a, int N) { int candidate1,candidate2; int nTimes1, nTimes2, i; for(i = nTimes1 = nTimes2 =0; i < N; i++) { if(nTimes1 == 0) { candidate1 = a[i], nTimes1 = 1; } else if(nTimes2 == 0 && candidate1 != a[i]) //注意:这里的判断条件加上第二个变量是否等于第一个变量的判断 { candidate2 = a[i], nTimes2 = 1; } else { if(candidate1 == a[i]) nTimes1++; else if(candidate2 == a[i]) nTimes2++; else { nTimes1--; nTimes2--; } } } return nTimes1>nTimes2?candidate1:candidate2; } int main() { int a[4]={0,1,2,1}; cout<<Find(a,4)<<endl; // int a[6]={1,0,2,1,2,1}; // cout<<Find(a,6)<<endl; }
2.总数必定是偶数,同时删除不同数字,最后剩余的两个数字必有其一为水王,只需简单判断一下即可。
int Find(int* a, int N) //a代表数组,N代表数组长度 { int candidate; int nTimes, i; for(i = nTimes = 0; i < N; i++) { if(nTimes == 0) { candidate = a[i], nTimes = 1; } else { if(candidate == a[i]) nTimes++; else nTimes--; } } int cTimes = 0; int candidate2 = a[N-1]; for(i = 0; i < N; i ++) { if(a[i] == candidate) { cTimes++; } } return cTimes == N/2 ? candidate : candidate2; }
0 0
- 加强版水王:找出出现次数刚好是一半的数字
- 找出数组中出现次数超过长度一半的数字
- 找出数组中出现次数超过一半的数字--百度
- 找出数组中出现次数超过一半的数字
- 找出数组中出现次数超过一半的数字
- 剑指offer中找出出现次数超过一半的数字
- 找出数组里出现次数超过一半的数字
- 找出数组中出现次数超过一半的数字
- 0057 找出数组中出现次数超过一半的数字
- 找出数组中出现一半以上次数的数字
- 数组中一个数字出现的次数超过了数组长度的一半,找出这个数字
- 数组中一个数字出现的次数超过了数组长度的一半,找出这个数字
- 一组无序的整数找出出现次数大于一半的数字
- 找出数组中出现次数超过数组长度一半的数字
- php算法:找出数组中出现次数超过数组长度一半的数字
- 找出数组中出现次数大于一半的数字 Java实现 剑指offer
- java实现找出数组中出现次数超过一半的数字
- 剑指Offer FindNumberMoreThanHalf 找出数组中出现次数超过一半的数字
- Ext4.x 树表格控件【Ext.tree.Panel】 Demo
- 进程
- 山东多名女生遭地痞性侵事件舆情分析
- vpn
- Linux驱动模型 - 概览
- 加强版水王:找出出现次数刚好是一半的数字
- Android中自定义样式与View的构造函数中的第三个参数defStyle的意义
- C++ STL编程 map
- java中的深复制与浅复制
- TextView加点击选择器出现点击后外圈变色bug
- Ubuntu下基于格式化命令 格式化U盘的方法
- TCP协议练习——转换
- cocos2d-x 加载多张帧动画
- Dom4j的使用