一个数组中有一个数字的次数超过了数组的一半,求出这个字符
2017-07-23 12:23
344 查看
解法一:一个数字出现的次数超过数组大小的一半,那么如果这是一个有序的数组,这个数字必定在数组中间的位置。
解法二:一个数字出现的次数超过数组大小的一半,也就是说,该数字出现的次数比其他数字出现次数的和还要多。那么,我们可以在遍历数组时设置两个变量result,times;result记录数组中的数字,times记录次数。当我们遍历下一个数字时,如果该数字与之前保存至result中的数字相同,则times++,反之times- -;如果times为0,则保存下一个数字至result,times置1。而我们要找的数字肯定是最后一次设置为result的数字。
具体代码看下面:
解法二:一个数字出现的次数超过数组大小的一半,也就是说,该数字出现的次数比其他数字出现次数的和还要多。那么,我们可以在遍历数组时设置两个变量result,times;result记录数组中的数字,times记录次数。当我们遍历下一个数字时,如果该数字与之前保存至result中的数字相同,则times++,反之times- -;如果times为0,则保存下一个数字至result,times置1。而我们要找的数字肯定是最后一次设置为result的数字。
具体代码看下面:
#include<iostream> using namespace std; int MoreThanHalfNum(int *arr, int size) { if (arr == NULL || size <= 0) return 0; int result = arr[0]; int times = 1; for (int i = 1; i < size; i++) { if (times == 0) { result = arr[i]; times = 1; } else if (arr[i] != result) times--; else times++; } return result; } int main() { int arr[12] = { 2, 3, 2, 2, 2, 2, 2, 5, 4, 1, 2, 3 }; cout << MoreThanHalfNum(arr, 12) << endl; system("pause"); return 0; }
相关文章推荐
- 超过一半的数字--一个数组中有一个数字的次数超过了数组的一半,求出这个字符。
- 求二叉树叶子节点的个数/求二叉树第k层的节点个数/一个数组中有一个数字的次数超过了数组的一半,求出这个字符
- 一个数组中有一个数字的次数超过了数组的一半,求出这个字符
- 一个数组中有一个数字的次数超过了数组的一半,求出这个字符
- 17_7_22 一个数组中有一个数字的次数超过了数组的一半,求出这个字符。
- 一个数组中有一个数字的次数超过了数组的一半,求出这个字符
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在
- C++数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。(牛客剑指offer)
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- C++数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
- 面试:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数字。
- 【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在
- 【算法习作】已知有一个数字在某数组中出现次数超过一半,求这个数
- 数组中有一个数字出现的次数超过数组的一半,请找出这个数字
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在
- 22.数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果