> Problem: [697. 数组的度]
都是用java代码实现的,从明天开始,同时用java代码和python代码双实现!
最近这几天有事情没更新,加油!最近更新的都是关于数组中统计数组中的元素方面的题,加油!!
# 思路
> 思路嘛,第一次看待这个题的时候我是比较懵逼的,我知道要去计算每个数字出现的次数,但是我不能用这个思路去解决出现的次数相同的话,比较两者之间的最小值,看官方的解题思路我也不能很好的去解决这个问题,于是我在后面看到了这位大神的解题思路,我才发现如此的简单,说上来我挺菜的,加油!
# 解题方法
> 简简单单的解题方法,首先定义三个数组大小必须比 nums[i]大,因为接下来的数组一个记录该数字出现的次数(countArr),一个记录该数字第一次出现的位置*(leftArr),一个记录该数字最后出现的位置(rightArr),在这三个数组中,下标均为nums[i]作为下标,方便计算,所以,我在此设置的数组长度为50009,其实50001就可以,习惯性设置这样子(nums[i] 是一个在 0 到 49,999 范围内的整数。),
后面那个for循环则循环countArr中的数,就很容易理解了,多看看就明白了,不明白可以在评论区里面问问!
# Code
```Java []
class Solution {
public int findShortestSubArray(int[] nums) {
int[] leftArr = new int[50009];
int[] rightArr = new int[50009];
int[] countArr = new int[50009];
Arrays.fill(leftArr,-1);
for (int i = 0; i < nums.length; i++) {
countArr[nums[i]]++;
if (leftArr[nums[i]] == -1) {
leftArr[nums[i]] = i;
rightArr[nums[i]] = i;
} else {
rightArr[nums[i]] = i;
}
}
int min = 50009;
int count = 0; //记录该数字出现的次数
for (int i = 0; i < 50009; i++) {
int x = countArr[i]; //该数字出现的次数
if (x == count) {
min = Math.min(min, rightArr[i] - leftArr[i] + 1);
} else if (x > count) {
min = rightArr[i] - leftArr[i] + 1;
count = x;
}
}
return min;
}
}
```

被折叠的 条评论
为什么被折叠?



