给定n个整数,编写一个实验程序找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
时间: 2023-06-14 16:05:20 浏览: 42
可以使用哈希表来解决这个问题。具体做法如下:
1. 遍历整个数组,对于每个数,将其作为键,在哈希表中进行查找。如果该数已经在哈希表中,则将该数对应的值加一;否则,在哈希表中添加该数,并将其值初始化为 1。
2. 遍历哈希表,找到出现次数最多的数。如果有多个数出现次数相同,则输出最小的那个数。
以下是 Python 代码实现:
```python
def find_most_frequent(nums):
hashmap = {}
max_freq = 0
min_num = float('inf')
for num in nums:
if num in hashmap:
hashmap[num] += 1
else:
hashmap[num] = 1
if hashmap[num] > max_freq:
max_freq = hashmap[num]
min_num = num
elif hashmap[num] == max_freq:
min_num = min(min_num, num)
return min_num
```
时间复杂度为 O(n),空间复杂度为 O(n)。
相关问题
用java给定n个整数,编写一个实验程序找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
可以使用HashMap来统计每个数字出现的次数,然后遍历一遍HashMap找出出现次数最多的数字,最后再遍历一遍原数组找出出现次数最多且最小的数字。
以下是Java代码实现:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
int[] nums = {1, 2, 3, 2, 1, 4, 4, 5, 5, 5};
Map<Integer, Integer> map = new HashMap<>();
// 统计每个数字出现的次数
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
// 找出出现次数最多的数字
int maxCount = 0;
int maxNum = Integer.MAX_VALUE;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
int num = entry.getKey();
int count = entry.getValue();
if (count > maxCount) {
maxCount = count;
maxNum = num;
} else if (count == maxCount && num < maxNum) {
maxNum = num;
}
}
System.out.println("出现次数最多的数字是:" + maxNum);
}
}
```
输出结果为:出现次数最多的数字是:5
给定 n 个正整数,编写一个java实验程序找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
好的,以下是代码实现:
```java
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = scanner.nextInt();
}
Map<Integer, Integer> map = new HashMap<>();
int maxCount = 0;
int minNum = Integer.MAX_VALUE;
for (int num : nums) {
int count = map.getOrDefault(num, 0) + 1;
map.put(num, count);
if (count > maxCount || (count == maxCount && num < minNum)) {
maxCount = count;
minNum = num;
}
}
System.out.println(minNum);
}
}
```
代码思路:
1. 读入 n 个正整数,并存储到数组 nums 中。
2. 创建一个哈希表 map,用于记录每个数出现的次数。
3. 遍历 nums 数组,对于每个数 num,从 map 中获取它出现的次数 count,然后将其更新为 count + 1,并存回 map 中。
4. 如果 count 大于当前记录的最大出现次数 maxCount,或者 count 等于 maxCount 但 num 更小,则更新 maxCount 和 minNum。
5. 遍历完 nums 数组后,minNum 即为出现次数最多的数中的最小数,输出即可。
希望能够帮到你!