這是leetcode第347題目數組
Given a non-empty array of integers, return the k most frequent elements.
For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2].ide
題目意思:找出數組中前k個常常出現的元素。this
1.數組循環一遍,把元素的出現次數都記錄下來
2.對元素出現次數作降序排序
3.選擇前k個元素輸出爲結果code
public class Solution { public List<Integer> topKFrequent(int[] nums, int k) { ArrayList<Element> elementList = new ArrayList<>(); //Map保存的是元素和elementList對應元素下標的鍵值對.空間換時間. HashMap<Integer, Integer> number2IndexMap = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int num = nums[i]; if (number2IndexMap.containsKey(num)) { //若是Map中已保存該num的鍵值對,則獲取出來而且count自增. int index = number2IndexMap.get(num); elementList.get(index).count++; } else { //不然,新建一組鍵值對,保存到Map中. Element element = new Element(num); elementList.add(element); number2IndexMap.put(num, elementList.size() - 1); } } //降序排序elementList. Collections.sort(elementList); //把前面k個輸出到resultList中. List<Integer> resultList = new ArrayList<>(); for (int i = 0; i < k; i++) { resultList.add(elementList.get(i).number); } return resultList; } /** * 用來記錄元素出現的次數 */ private static class Element implements Comparable<Element> { public final int number; public int count = 0; public Element(int number) { this.number = number; } @Override public int compareTo(Element element) { return element.count - this.count; } } }