-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
这道题中,一开始看到subArray想到利用滑动窗口的方法,但问题是:
- 窗口左边界缩小时如何排除元素?&运算不可逆
- &运算最大值,多个数的&运算不会超过他们的最大值
- 题目暗示了先找到最大值
所以要冷静,逻辑思考。
class Solution {
public int longestSubarray(int[] nums) {
int max = 0;
List<Integer> list = new ArrayList<>();
for (int i = 0; i < nums.length; ++i) {
if (nums[i] > max) {
list.clear();
list.add(i);
max = nums[i];
} else if (nums[i] == max) {
list.add(i);
}
}
int result = 1;
int len = 0;
int prev = -1;
for (Integer integer : list) {
if (prev == -1 || integer == prev + 1) {
++len;
result = Math.max(result, len);
} else {
len = 1;
}
prev = integer;
}
return result;
}
}
Metadata
Metadata
Assignees
Labels
No labels