数组中出现次数超过一半的数字
来源:互联网 发布:小米快盘数据迁移 编辑:程序博客网 时间:2024/06/03 18:36
代码:
#include <iostream>#include <random>using namespace std;int RandomRange(int start, int end){ uniform_int_distribution<int> u(start, end); default_random_engine e; return u(e);}int Partition(int data[], int length,int start, int end) //随机快速排序{ if (data == nullptr || length <= 0 || start < 0 || end >= length) throw new exception("Invalid parameters"); int index = RandomRange(start, end); //随机选择一个索引 swap(data[index], data[end]); int small = start - 1; for (int index = start; index < end; ++index) { if (data[index] < data[end]) { ++small; if (small != index) swap(data[small], data[index]); } } ++small; swap(data[small], data[end]); return small;}int MoreThanOneHalfNumber(int *data, int length){ int start = 0, end = length - 1; int mid = (start + end) / 2; int index = Partition(data, length,start, end); while (index != mid) { if (index < mid) { start = index + 1; index = Partition(data, length,start, end); } else { end = index - 1; index = Partition(data,length, start, end); } } return data[mid];}bool checkMoreThanHalf(int* data, int length, int number){ int times = 0; for (int i = 0; i < length; i++) { if (data[i] == number) ++times; } if (2 * times <= length) return false; else return true;}int main(){ int data[] = { 1, 2, 3, 2, 2, 2, 5, 4, 2 }; int length = sizeof(data) / sizeof(data[0]); int result = MoreThanOneHalfNumber(data, length); cout << "数组中出现次数超过一半的数字: " << result << endl; cout << boolalpha<<checkMoreThanHalf(data, length,result)<< endl; cout << endl; system("pause"); return 0;}
测试:
解法二:
代码:
int MoreThanOneHalfNumber(int* data, int length){ if (data == nullptr || length <= 0) throw new exception("Invalid Parameters"); int result = data[0]; int times = 1; for (int i = 1; i < length; i++) { if (data[i] == result) { times++; } else if (times == 0) { result = data[i]; times++; } else { times--; } } return result;}
0 0
- 数组中超过出现次数超过一半的数字
- 74.数组中超过出现次数超过一半的数字
- 74 数组中超过出现次数超过一半的数字
- 【数组4】数组中出现次数超过一半的数字
- 数组4:数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 找出数组中出现次数超过长度一半的数字
- 2-数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字[算法]
- 数组中出现次数超过一半的数字
- 找出数组中出现次数超过一半的数字--百度
- 数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 寻找数组中出现次数超过一半的数字
- 面试训练数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- hadoop的伪分布安装
- 开心的小明
- sort等库函数不能调用class方法的问题
- Java 中的 static 使用之静态初始化块
- 小白日记35:kali渗透测试之Web渗透-手动漏洞挖掘(一)-默认安装引发的漏洞
- 数组中出现次数超过一半的数字
- Django LOGGING 的配置(字典方式)
- 关于serialVersionUID的说明
- sql
- 第十七篇玩转【斗鱼直播APP】系列之娱乐基本展示
- android主线成有looper.loop()为什么不被卡死
- iOS安全攻防
- js基础第8课:改变 HTML 样式
- Sqlite数据库sqlite3命令