AcWing 3192. 出现次数最多的数-Java两种解法
原题链接
简单
作者:
OneDay1
,
2021-04-04 13:12:48
,
所有人可见
,
阅读 437
第一种方法
import java.util.*;
public class Main{
static Map<Integer,Integer> map = new HashMap<Integer,Integer>();
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i = 0 ; i < n; i++){
int t = sc.nextInt();
//返回指定键映射到的值,如果该映射不包含该键的映射,则返回defaultValue。
map.put(t,map.getOrDefault(t,0)+1);
}
int res = 0,cnt = 0;
//map集合的输出方式
for(Map.Entry<Integer,Integer> t: map.entrySet()){
int a = t.getKey(),b = t.getValue();
if(b > cnt || b == cnt && res > a){
res = a;
cnt = b;
}
}
System.out.println(res);
}
}
第二种方法
import java.util.*;
public class Main{
static int N = 1010;
static int[] s = new int[N*10];
public static void main(String[] args){
Scanner sc =new Scanner(System.in);
int n = sc.nextInt();
int[] a =new int[n];
for(int i = 0; i < n; i++){
a[i] = sc.nextInt();
}
Arrays.sort(a);
for(int i =0; i< n; i++){
s[a[i]] ++;
}
int res = 0,cnt = 0;
for(int i = 0; i< n; i++){
if(s[a[i]] == cnt && a[i] < res || s[a[i]] > cnt){
res = a[i];
cnt = s[a[i]];
}
}
System.out.println(res);
}
}
第二种解法数据不能过完
我这边测试可以ac
Arrays.sort(a);
for(int i =0; i< n; i){
s[a[i]] ;
}
为什么把这个删了,s[a[i]]++添加到输入里面,数据太大就会报错呀
先排序,是把相同的数放在一起,s[]是存储的a[i]的数出现的次数
那和我直接在输入的数据的时候存储有什么区别吗 ?就比如说我这么写
for(int i = 0; i < n; i){
a[i] = sc.nextInt();
s[a[i]] ;
}
首先你输入的数字是没有排序的,这样对于下标的统计是不对的,而且你这段代码没有统计你输入数据的个数,建议手动模拟一下