给有n个数的数组a,其中超过一半的数为一个定值,在不排序,不开额外数组情况下,以最高效的方法找出这个数。
2014-10-20 22:14
495 查看
题目:给有n个数的数组a,其中超过一半的数为一个定值,在不排序,不开额外数组情况下,以最高效的方法找出这个数。
这道题目在2014年人人网校园招聘笔试卷子出现过,估计对很多大牛来说此题太简单了。
解法:定义A用于记录返回值,B用于计数;
初始化:A=a[0],B=0;
A和B的状态变化请见以下代码,逻辑挺简单的,就不用文字叙述。这个方法的空间复杂度为O(1),时间复杂度为O(n)。
这道题目在2014年人人网校园招聘笔试卷子出现过,估计对很多大牛来说此题太简单了。
解法:定义A用于记录返回值,B用于计数;
初始化:A=a[0],B=0;
A和B的状态变化请见以下代码,逻辑挺简单的,就不用文字叙述。这个方法的空间复杂度为O(1),时间复杂度为O(n)。
int findnum(int a[], int n) { int A=a[0]; int B=0; for(int i=1;i<n;i++) { if(B==0) { if(a[i]!=a[i-1]) A=a[i]; else B++; } else if(B>0) { if(a[i]!=a[i-1]) { B--; } else B++; } } return A; }
相关文章推荐
- 整型数组处理算法(十)给定数组a[n],其中有超过一半的数为一个定值,找出这个数。[2014人人网笔试题]
- 消除原理____假设数组中有一个数字出现的次数超过了数组长度的一半,试编程找出这个数字(qosrt 快速排序 哈希)
- 在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素。
- 假设数组中有一个数字出现的次数超过了数组长度的一半,试编程找出这个数字(消除 qosrt 快速排序 哈希)
- 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
- 现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。
- 数组中一个数字出现的次数超过了数组长度的一半,找出这个数字
- 11.5 排序后的字符串数组,其中散布着空字符串,编写一个方法,找出给定字符串的位置。
- 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
- 现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 【Java】有个排序后的字符串数组,其中散布着一些空字符串,编写一个方法,找出给定字符串的位置
- 面试题:在一个数组中有0-99之间的整数101个(数组无序),用高效方法找出其中的唯一的重复元素!
- 面试:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
- C++数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。(牛客剑指offer)
- C++数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
- 数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数。java实现
- 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数