解题思路
这道题目可以使用遍历+哈希表的方法解决。对于每个数组元素,我们可以:
- 将其作为可能被修改成的目标值
- 统计原数组中与该值相同的元素个数
- 由于可以修改一个其他的数,所以最终结果是该值的出现次数+1(如果还有其他不同的数)
代码
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> nums(n);
for(int i = 0; i < n; i++) {
cin >> nums[i];
}
unordered_map<int, int> count;
for(int num : nums) {
count[num]++;
}
int maxCount = 0;
for(auto [num, freq] : count) {
maxCount = max(maxCount, freq + (n > freq ? 1 : 0));
}
cout << maxCount << endl;
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] nums = new int[n];
for(int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
}
Map<Integer, Integer> count = new HashMap<>();
for(int num : nums) {
count.put(num, count.getOrDefault(num, 0) + 1);
}
int maxCount = 0;
for(Map.Entry<Integer, Integer> entry : count.entrySet()) {
int freq = entry.getValue();
maxCount = Math.max(maxCount, freq + (n > freq ? 1 : 0));
}
System.out.println(maxCount);
}
}
n = int(input())
nums = list(map(int, input().split()))
count = {}
for num in nums:
count[num] = count.get(num, 0) + 1
max_count = 0
for num, freq in count.items():
max_count = max(max_count, freq + (1 if n > freq else 0))
print(max_count)
算法及复杂度
- 算法:哈希。
- 时间复杂度:,其中 n 为数组长度。
- 空间复杂度:,需要哈希表存储每个数字的出现次数。