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) ;
}
}