emmm,这题也很简单,直接看代码吧
package com.study.蓝桥杯.算法训练;
import java.util.Scanner;
/**
* @author sjn
* @date 2022-1-27
*/
/*
问题描述
编写一个程序,计算递增数组的众数。程序第一行输入n(1≤n≤20),表示数组的长度;第二行输入数组中各个元素的值。输出数组中出现次数最多的元素。如果有两个元素出现的次数相同,即并列第一,那么只输出较小的那个元素。(注:输入的数组是递增数组,已经排好序,程序中不需要进行排序)
样例输入
6
100 150 150 200 200 250
样例输出
150
*/
public class ALGO_485计算众数 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
System.out.println(getResult(arr));
}
public static int getResult(int[] arr) {
//res数组第一列存储数字,第二列存储数字出现的次数
//这里数组行数开arr.length是因为考虑了数组arr的长度为1的特殊情况
int[][] res = new int[arr.length][2];
res[0][0] = arr[0];
res[0][1] = 1;
int j = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[i] != arr[i - 1]) {
res[++j][0] = arr[i];
}
res[j][1]++;
}
int index = 0;
for (int i = 1; i < arr.length - 1; i++) {
if (res[index][1] < res[i][1]) {
index = i;
}
//如果有两个元素出现的次数相同,即并列第一,那么只输出较小的那个元素
if (res[index][1] == res[i][1]) {
if (res[index][0] > res[i][0]) {
index = i;
}
}
}
return res[index][0];
}
}