原题的链接:继续找相同-WOJ1204
Description
有 n 个整数, 其中有且仅有一个整数出现了 >= n/2.0 次 (n<=500000)
Input
每组数据第一行是 n, 然后接下来一行是 n 个整数, 请读入到 EOF
Output
输出每行一个整数, 即要找的这个数
Sample Input
9
5 5 5 5 5 1 2 3 4
5 5 5 5 5 1 2 3 4
Sample Output
5
解题思路,其实可以排序的,用C++,sort()函数可以快速搞定,之后可以找中位数便是所求。
解题代码请猛击:WOJ1204.c
解题思路之二:
用栈来解决。设置两个数组,其中一个是要求输入的数组a。另一个数组b用于保存含有相同的元素的序列。
先把数组的第一个值压入栈底,在看第二个数是不是和第一个数是相同的。如果相同则进栈,否则的话栈底元素出栈继续执行。
注意边缘情况数组里面只有两个不同的元素。这个时候b[0]和b[1]保存的是不同的元素。再次扫描可得。解法比较复杂,建议第一种比较好!
解题代码请猛击:WOJ1204.c
本文介绍了一种寻找数组中出现次数超过一半的整数的方法。提供了两种解决方案:一种是通过排序找到中位数;另一种是使用栈来跟踪相同元素。详细讨论了这两种方法,并附带了解题代码。

4777

被折叠的 条评论
为什么被折叠?



