給定一個非空且只包含非負數的整數數組 nums,數組的 度 的定義是指數組里任一元素出現頻數的最大值。
你的任務是在 nums 中找到與 nums 擁有相同大小的度的最短連續子數組,返回其長度。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/degree-of-an-array
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
class Solution {public int findShortestSubArray(int[] nums) {int n = nums.length;Map<Integer,int[]> map = new HashMap<Integer,int[]>(); for(int i = 0;i<n;i++){if(map.containsKey(nums[i])){map.get(nums[i])[0]++;map.get(nums[i])[2] = i;}else{map.put(nums[i],new int[]{1,i,i});}}int maxNum = 0;int minLen = 0;for(Map.Entry<Integer,int[]> entry : map.entrySet()){int[] arr = entry.getValue();if(maxNum<arr[0]){maxNum = arr[0];minLen = arr[2] - arr[1]+1;}else if(maxNum == arr[0]){minLen = Math.min(minLen,arr[2]-arr[1]+1);}}return minLen;}
}
HashMap中值是數組類型,int[3],數組分別存儲nums[i]出現的最大次數、第一次出現的下標和最后一次出現的下標。