1. 给你n个数,找出出现次数超过一半的数,保证存在这样一个数 输入格式 第一行输入一个整数n , (n<=1000) 第二行输入n个整数(<1000000) 输出格式 输出一个整数
时间: 2024-11-15 20:22:57 浏览: 0
世界500强面试题.pdf
这是一个经典的计算机科学问题,通常被称为“寻找众数”或者“多数元素”。给定一组整数,你需要找到其中出现次数超过总数一半的数字。这个问题可以用哈希表或者桶排序等数据结构来解决。以下是基本步骤:
1. **初始化**:创建一个长度为1000000(大于所有可能的整数)的计数数组(Python中可以使用列表,Java中可以使用HashMap),并将所有值初始化为0。
2. **遍历输入**:读取每个输入的整数,对于每个数i,将计数数组对应的索引位置i+1的计数加一。
3. **计算中间值**:由于数组的下标从0开始,所以数组的中间位置是500000,这个位置的数出现了一半的次数。
4. **查找多数元素**:遍历计数数组,当遇到第一个计数值大于或等于中间值的位置,同时继续检查其右侧的元素是否都小于当前元素,如果是,则找到了多数元素。因为一旦超过了中间值的一半,左侧不可能再有其他元素的计数超过它。
5. **输出结果**:返回当前多数元素作为答案。
**伪代码示例**(Python):
```python
def find_majority_element(n, nums):
count = [0] * 1000001
for num in nums:
count[num + 1] += 1
majority_index = None
candidate_count = 0
for i, freq in enumerate(count):
if freq > n // 2:
if not majority_index or candidate_count == n // 2:
majority_index = i
candidate_count = freq
else:
candidate_count -= 1
return majority_index
```
阅读全文