数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
来源:互联网 发布:投影机网络接口 编辑:程序博客网 时间:2024/04/29 07:43
这个方法借用了别人的思路。
在这里我做一下简单的分析。
这个算法的时间复杂度是O(n),另外用了两个辅助变量。
k用于临时存储数组中的数据,j用于存储某个数出现的次数。
开始时k存储数组中的第一个数,j为0,如果数组出现的数于k相等,则j加1,否则就减1,如果j为0,就把当前数组中的数赋给k
因为指定的数出现的次数大于数组长度的一半,所有j++与j--相抵消之后,最后j的值是大于等于1的,k中存的那个数就是出现最多的那个数。
在这里我做一下简单的分析。
这个算法的时间复杂度是O(n),另外用了两个辅助变量。
k用于临时存储数组中的数据,j用于存储某个数出现的次数。
开始时k存储数组中的第一个数,j为0,如果数组出现的数于k相等,则j加1,否则就减1,如果j为0,就把当前数组中的数赋给k
因为指定的数出现的次数大于数组长度的一半,所有j++与j--相抵消之后,最后j的值是大于等于1的,k中存的那个数就是出现最多的那个数。
下面这个算法只适合数组中数组中某个数的出现次数超过数组长度一半的数组,符合题意。
方法三
};
int Search(int A[],int len) { if(NULL==A || len<=0) { return -1; } int k, j=0; for(int i=0;i<len;++i) { if(j==0) { k=A[i]; } if(k==A[i]) { ++j;//有人说++j比j++有先天的优势,不知你是否听说,如果你也听说,有没有想过More Effective C++(C++程序员必看书籍) }else { --j; } } return k; }
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 面试:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数。java实现
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 数组中一个数字出现的次数超过了数组长度的一半,找出这个数字
- 数组中一个数字出现的次数超过了数组长度的一半,找出这个数字
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
- C++数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
- 数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数字。
- C++数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。(牛客剑指offer)
- 【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
- 假设数组中有一个数字出现的次数超过了数组长度的一半,试编程找出这个数字(消除 qosrt 快速排序 哈希)
- 找出数组中出现次数超过长度一半的数字
- linux arm 面试题
- 谱聚类
- android 键值控制显示屏 TP调试
- 黑马程序员_网络编程学习笔记-->代码主要是对UDP协议的讲解
- Windows 各种计时函数总结
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- C++ 类的静态成员详细讲解
- POJ 3641 HDU 1905 Pseudoprime numbers 素数 模取幂
- 带返回参数函数
- 堆与堆排序
- CSS面试题1
- word精髓
- 快速排序
- 将字符串"aaaabbbccccddddd"转化为"a4b3c4d5"