697. 数组的度
解题思路
- 首先创建一个IndexMap 键表示元素 值表示一个列表List list存储该元素在数组的所有索引
- 之后再次创建一个map1 针对上面的List 键表示列表的长度 值表示索引的差值
- 遍历indexmap 将所有的list的长度 和 索引的差值存储
- 遍历map1 找到最大的key 那么这个Key就是代表最大list长度 也就是代表出现最多次数的那个元素 然后取出值(代表索引差值 记得加一)
class Solution {
public int findShortestSubArray(int[] nums) {
Map<Integer,List<Integer>> indexMap = new HashMap<>();
for(int i = 0; i < nums.length; i++){
int num = nums[i];
if(indexMap.containsKey(num)){
indexMap.get(num).add(i);
}else{
List<Integer> indexList = new ArrayList<>();
indexList.add(i);
indexMap.put(num,indexList);
}
}
Map<Integer,Integer> map1 = new HashMap<>();
for(Map.Entry<Integer,List<Integer>> entry:indexMap.entrySet()){
int element = entry.getKey();
List<Integer> indexes = entry.getValue();
if(map1.containsKey(indexes.size())){
if(map1.get(indexes.size()) > (indexes.get(indexes.size() - 1) - indexes.get(0))){
map1.put(indexes.size(),indexes.get(indexes.size() - 1) - indexes.get(0) + 1);
}
}else{
map1.put(indexes.size(),indexes.get(indexes.size() - 1) - indexes.get(0) + 1);
}
}
int maxV = Integer.MIN_VALUE;
for(Map.Entry<Integer,Integer> entry:map1.entrySet()){
if(maxV <= entry.getKey()){
maxV = entry.getKey();
}
}
return map1.get(maxV);
}
}