题目描述:
编写程序计算10个正整数的平均数,找出这10个数中雨平均值的距离最近的三个数(差值的绝对值)。以距离的大小对这三个数进行排序并输出(距离小的先输出)
输入:[33,44,61,2,36,42,56,81,11,17]
输出:[36,42,33]
思路:
1. 算平均值。
2. 用hashmap,每个数减去平均值,取绝对值,存入key。value存当前那个数。
3.用一个ArrayList存一下keys,并排序。
4. 把排序后的list的前三个元素当成key,去map根据key来get值。
1 import java.util.*; 2 import java.lang.Math; 3 public class Main { 4 public static void main(String[] args) { 5 int[] arr = new int[]{33,44,61,2,36,42,56,81,11,17}; 6 System.out.println(Arrays.toString(find(arr))); 7 } 8 public static int[] find(int[] arr){ 9 int[] res = new int[3]; 10 int sum = 0; 11 int ave = 0; 12 for(int i = 0; i < arr.length; i++){ 13 sum += arr[i]; 14 } 15 ave = sum / arr.length; 16 Map<Integer,Integer> map = new HashMap<>(); 17 for(int i = 0; i < arr.length; i++){ 18 map.put(Math.abs(arr[i]-ave),arr[i]); 19 } 20 List<Integer> list = new ArrayList<>(); 21 for(Integer key : map.keySet()){ 22 list.add(key); 23 } 24 Collections.sort(list); 25 for (int i = 0; i < 3; i++){ 26 res[i] = map.get(list.get(i)); 27 } 28 return res; 29 } 30 31 }