解决:
代码简单,看懂代码就看懂逻辑了,有没有大神能有简单一点的方法,欢迎评论交流。
package edu.itstudy.com.Day.day0911;
import java.util.Scanner;
public class 数组超过阈值次数的元素 {
public static void main(String[] args) {
// int arr[] ={1,1,2,2,3,3,5,5,5,5,6,6,6,6};
System.out.println("请输入数组长度和阈值:");
Scanner sc = new Scanner(System.in);
int len = sc.nextInt();
int k = sc.nextInt();
int[] arr = new int[len];
for (int i=0;i<len;i++){
arr[i] = sc.nextInt();
}
System.out.println(find(arr,3));
}
public static int find(int[] arr,int k){
int[] count = new int[10000];
for (int i =0;i<arr.length;i++){
count[arr[i]]++;
}
int returnnum[] = arrMax(count);
//存在这样的元素
if(returnnum[0]>=k)
{
if(returnnum.length==2){
//满足元素只有一个或者多个元素则返回最大的值
return returnnum[1];
}
if(returnnum.length>2){
int minIndex = arr.length-1;
//最大值有多个
for(int i =1;i<returnnum.length;i++){
for(int j=0;j<arr.length;j++){
if(returnnum[i]==arr[j]){
if(j<minIndex){
minIndex = j;
}
}
}
}
return arr[minIndex];
}
}
//不存在这样的元素就返回-1
return -1;
}
//找出数组中的最大值及其索引,res[0]是最大值,res[1]是索引值
public static int[] arrMax(int[] arr){
int res[] = new int[10];
res[0] = arr[0];
int k =1;
for (int i =0;i<arr.length;i++){
if(arr[i]>res[0]){
res[0] = arr[i];
}
}
for (int i =0;i<arr.length;i++){
if(arr[i]==res[0]){
res[k]=i;
k++;
}
}
int len =0;
for(int i =res.length-1;i>=0;i--){
if(res[i]==0){
len++;
}
if(res[i]!=0){
break;
}
}
int newlen = res.length-len;
int[] newRes = new int[newlen];
int t =0;
for (int i =0;i<newRes.length;i++){
newRes[i]=res[t];
t++;
}
return newRes;
}
}