CCF--出现次数最多的数--用java语言实现

题目要求:

这道题有很多做法,我自己用桶排序原理实现了一遍。但在网上看到了一个挺不错的思路,就自己再实现一遍。这是原作者的博客地址:https://blog.csdn.net/gamer_gyt/article/details/44541117

思路:
整体思路:定义两个数组,长度一致。数组1用来存放输入的数,数组2用来记录数组1元素出现的次数(数组2元素表示数组1出现相同的次数,数组2下标与数组1的下标一致,这样就可以用根据数组2的元素大小来判定arr1中哪些值是出现最多,然后找出最小的输出)。数组1与数组2的关系如下:
判断出现次数最多:先记录arr2中最大的元素max(也就是arr1中出现最多的数)和它的下标位置temp。接着将arr1中出现次数最多的数赋给min,然后找出最小的值输出。


代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int min = 0;		//出现次数相同中最小的数
		int max = 0;		//arr2最大的元素
		int temp = 0;
		
		Scanner sc = new Scanner(System.in);
		int n  = sc.nextInt();
		
		int arr1[] = new int[n];		//arr1作用:输入的数存放在arr1
		int arr2[] = new int[n];		//arr2作用:将arr1元素出现的次数作为arr2的元素
		for(int i=0;i<n;i++){
			arr1[i] = sc.nextInt();		
			arr2[i] = 0;			//将arr2元素都初始化
		}
		
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){		//每个arr1每个元素都拿出来比较
				if(arr1[j]==arr1[i]){	//判断相同的元素,arr2序号元素自增
	        	   arr2[i]++;	
	        	}
			}
		}
		
		for(int i=0;i<n;i++){
		 if(arr2[i]>max){			//找出arr2中最大的元素
	        
	        max = arr2[i];			        //将arr2中最大的元素给max
	        temp = i;				//用temp记住最大元素的下标位置
	     
	        }
	       }
		
	 	min = arr1[temp];			//在数组arr1中找到出现次数最多的那个元素
	 	for(int i = 0;i<n;i++){
	 		if(arr2[i] == max)	{	//判断arr2中元素存在等于max(max是arr2最大的元素)
	 		   if(arr1[i]<arr1[temp]){      //遇见相同次数的元素,选择最小的
	 			   min = arr1[i];
	 		   }
	 		}
	 	}
	 		System.out.println(min);		
		}
	}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值