697-数组的度
給定一個非空且只包含非負數的整數數組 nums, 數組的度的定義是指數組里任一元素出現頻數的最大值。
你的任務是找到與 nums 擁有相同大小的度的最短連續子數組,返回其長度。
示例 1:
輸入: [1, 2, 2, 3, 1]
輸出: 2
解釋:
輸入數組的度是2,因為元素1和2的出現頻數最大,均為2.
連續子數組里面擁有相同度的有如下所示:
[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]
最短連續子數組[2, 2]的長度為2,所以返回2.示例 2:
輸入: [1,2,2,3,1,4,2]
輸出: 6注意:
nums.length 在1到50,000區間范圍內。
nums[i] 是一個在0到49,999范圍內的整數。解法一:
public static int findShortestSubArray(int[] nums) {Map<Integer,Integer> map=new HashMap<>();List<Integer> list=new ArrayList<>();for (int a:nums){map.put(a,map.containsKey(a)?map.get(a)+1:1);list.add(a);}int max=0;for (int i=0;i<nums.length;i++)max=map.get(nums[i])>max?map.get(nums[i]):max;int du=list.size();for (int i=0;i<nums.length;i++){if (map.get(nums[i])==max&&du>(list.lastIndexOf(nums[i])-list.indexOf(nums[i])+1)){du=list.lastIndexOf(nums[i])-list.indexOf(nums[i])+1;}}return du;}解法2:public static int findShortestSubArray(int[] nums) {int max=0;for (int a:nums)max=a>max?a:max;int maxSize[]=new int[max+1];int minSize[]=new int[max+1];int mapSize[]=new int[max+1];int du=1;for (int i=0;i<nums.length;i++){int num=nums[i];if (minSize[num]==0){minSize[num]=i;maxSize[num]=i;}else {maxSize[num]=i;}du =Math.max(++mapSize[num],du);}int res=50001;for (int i=1;i<=max;i++){if (du==mapSize[i]){res=Math.min(res,maxSize[i]-minSize[i]+1);}}return res;}
?
轉載于:https://www.cnblogs.com/dloading/p/10820991.html
總結
- 上一篇: js局部刷新
- 下一篇: 05-配置数据库的远程连接 创建hive