首页 > 试题广场 >

小欧的数组修改

[编程题]小欧的数组修改
  • 热度指数:824 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小欧拿到了一个数组,她可以修改其中任意一个元素的值(也可以不修改),使得出现次数最多的那个元素次数尽可能多。你能求出这个最多的出现次数吗?

输入描述:
第一行输入一个正整数n,代表数组的大小。
第二行输入n个正整数a_i,代表数组的各个元素。


输出描述:
一个正整数,代表小欧操作后出现最多的元素次数。
示例1

输入

3
1 2 3

输出

2

说明

将1修改为3,数组变成[3,2,3],3出现了2次。修改方式并不是唯一的。
示例2

输入

1
4

输出

1

说明

由于只有一个数,所以无论是否进行修改,它都只出现了1次。
import java.util.Scanner;
public class Main {
    final static int N = 100000;
    static int[] a = new int[N];
    static int[] b = new int[N];
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), ans = 0;
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
        }
        for (int i = 0; i < n; i++) {
            b[a[i]]++;
        }
        for (int i = 0; i < N; i++) {//Math.min(n, b[n]+1) 是为了确保得到的b[i]+1没有大于n
            ans = Math.max(ans, Math.min(n, b[i] + 1));
        }
        System.out.println(ans);
    }
}

发表于 2024-11-23 13:51:07 回复(0)
from typing import Counter


n = int(input())

a = list(map(int, input().split()))

if sum(a) == n * a[0]:
    print(n)
    exit(0)
print(max(Counter(a).values()) + 1)
发表于 2024-11-20 19:03:06 回复(0)