ID | Title | Difficulty | |
---|---|---|---|
Loading... |
697. Degree of an Array
Easy
LeetCode
Array, Hash Table
Problem
Given a non-empty array of non-negative integers nums, the degree of this array is defined as the maximum frequency of any one of its elements.
Your task is to find the smallest possible length of a (contiguous) subarray of nums, that has the same degree as nums.
Example 1:
Input: nums = [1,2,2,3,1]
Output: 2
Explanation:
The input array has a degree of 2 because both elements 1 and 2 appear twice.
Of the subarrays that have the same degree:
[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]
The shortest length is 2. So return 2.
Example 2:
Input: nums = [1,2,2,3,1,4,2]
Output: 6
Explanation:
The degree is 3 because the element 2 is repeated 3 times.
So [2,2,3,1,4,2] is the shortest subarray, therefore returning 6.
Constraints:
- nums.length will be between 1 and 50,000.
- nums[i] will be an integer between 0 and 49,999.
Code
class Solution {
class Node {
int count;
int start;
Node(int count, int start) {
this.count = count;
this.start = start;
}
}
public int findShortestSubArray(int[] nums) {
HashMap<Integer, Node> map = new HashMap<>();
int res = 0;
int degree = 0;
for(int i = 0; i < nums.length; i++) {
int num = nums[i];
if(!map.containsKey(num)) {
map.put(num, new Node(1, i));
} else {
Node node = map.get(num);
node.count++;
map.put(num, node);
}
Node node = map.get(num);
if(node.count > degree) {
degree = node.count;
res = i - node.start + 1;
} else if (node.count == degree) {
res = Math.min(res, i - node.start + 1);
}
}
return res;
}
}
按 <- 键看上一题!
696. Count Binary Substrings
按 -> 键看下一题!
698. Partition to K Equal Sum Subsets