LeetCode # Array # Easy # 697 Degree of an Array
Posted dongpingan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode # Array # Easy # 697 Degree of an Array相关的知识,希望对你有一定的参考价值。
题意:给定一个数组,数组的度是其中出现最多次数的元素。求,最小连续子数组的度和原数组一致。
思路:(参考最佳答案)
遍历数组,找到数组最大值,然后根据最大值设置三个长度为max+1的数组left[],right[],counts[],分别用于存储一个数第一次出现的索引、最后一次出现的索引、出现次数。然后,根据counts找到数组的度,再根据right-left求出最小的子数组长度。
1 public class Solution { 2 public int findShortestSubArray(int[] nums) { 3 if(nums.length == 0 || nums == null ) return 0; 4 int max = 0,n=nums.length; 5 for(int num : nums){//求出最大值 6 max=Math.max(max, num); 7 } 8 int[] counts = new int[max+1]; 9 int[] left = new int[max+1]; 10 int[] right = new int[max+1]; 11 for(int i =0; i<n;i++){ 12 if(counts[nums[i]] == 0){ 13 left[nums[i]] = i; 14 right[nums[i]] = i; 15 }else { 16 right[nums[i]] = i; 17 } 18 counts[nums[i]]++; 19 } 20 int max_count =0; 21 for(int count : counts){//求出数组的度 22 max_count = Math.max(max_count, count); 23 } 24 int min = max+1; 25 for(int i=0;i<max+1 ; i++){//求出最小长度 26 if(counts[i] == max_count) { 27 min = Math.min(min, right[i]-left[i]+1); 28 } 29 } 30 return min; 31 } 32 }
参考:https://leetcode.com/submissions/detail/154332786/
以上是关于LeetCode # Array # Easy # 697 Degree of an Array的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode--219268283414448 Array(Easy)
LeetCode--Array--Two sum (Easy)
LeetCode # Array # Easy # 665. Non-decreasing Array
java [14。最长的共同前缀] #Array #Leetcode #Easy