算法题:无序数组筛选、排序

1.一个整数数组(百万级),找出重复次数最多的数。
2.按照重复次数从小到大排序,若重复次数相等,则按照数值从大到小排序。
解题思路:
1.使用一个HashMap结构的数据类型来存放结果。在HashMap中,key用来存放重复次数最多的元素,value 用来存放该元素的重复次数。然后遍历HashMap结构即可获得结果。
2.HashMap或Map本身没有排序功能,若要进行较轻松的排序,可利用ArrayList中的sort方法。

package code;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class FindMaxCountAndSort {

	public static void main(String[] args) {

		
		
		int[] arr = {1,1,1,1,6,7,8,8,8,9,2,2,3,3,3,6};
		//key为出现的数字,value为出现的次数
		HashMap<Integer,Integer> map = new HashMap<>();
		for (int i = 0; i < arr.length; i++) {
			if (map.containsKey(arr[i])) {
				int temp = map.get(arr[i]);
				map.put(arr[i], temp + 1);
			} else {
				map.put(arr[i], 1);
			}
		}
		
		Collection<Integer> count = map.values();
		int maxCount = Collections.max(count);
		int maxCountFigure = 0;
		for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
			if (maxCount == entry.getValue()) {
				maxCountFigure = entry.getKey();
			}
		}
		System.out.println("数列中出现次数最多的数为:" + maxCountFigure);
		
		//2.排序规则:按照出现次数对元素从小到大排序,如果出现次数相等,对元素从大到小排序
		List<Map.Entry<Integer, Integer>> list = new ArrayList<>();
		for (Entry<Integer, Integer> entry : map.entrySet()) {
			list.add(entry);
		}
		list.sort(new Comparator<Map.Entry<Integer,Integer>>() {

			@Override
			public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
				if (o1.getValue() != o2.getValue()) {
					return o1.getValue() - o2.getValue();
				}
				
				return o2.getKey() - o1.getKey();
			}
		});
		List<Integer> keyList = new ArrayList<>();
		for (Entry<Integer, Integer> entry : list) {
			keyList.add(entry.getKey());
		}		
		
		System.out.println("数列按规则排序为:" + keyList);		
		
	}
		
}

算法题:无序数组筛选、排序_第1张图片

你可能感兴趣的:(算法题)