Title:Longest Continuous Increasing Subsequence 697
Difficulty:Easy
原题leetcode地址:https://leetcode.com/problems/degree-of-an-array/
1. Map的Key的唯一性,Value不断的更新
时间复杂度:O(n),两次一层for循环,遍历整个数组。
空间复杂度:O(n),申请额外的3个Map空间。
/**
* 本题不难,需要巧妙的应用Map的特性:Key唯一,Value更新
* getOrDefault()
* Collections.max()
* Map的Key的遍历
* @param nums
* @return
*/
public static int findShortestSubArray(int[] nums) {
Map<Integer, Integer> begin = new HashMap<>();
Map<Integer, Integer> end = new HashMap<>();
Map<Integer, Integer> count = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (begin.get(nums[i]) == null) {
begin.put(nums[i], i);
}
end.put(nums[i], i);
count.put(nums[i], count.getOrDefault(nums[i], 0) + 1);
}
int min = nums.length;
int degree = Collections.max(count.values());
for (int key : count.keySet()) {
if (count.get(key) == degree) {
min = Math.min(min, end.get(key) - begin.get(key) + 1);
}
}
return min;
}