是一道前向双指针题,类似于flip或者change元素的,可以想象维护一个window来做。
int findMaxConsecutiveOnes(vector<int>& nums) {
if(nums.empty()) return 0;
int start = 0, cnt = 0, max_ret = 0;
for(int i=0; i<nums.size(); i++){
if(nums[i] == 0) cnt++;
while(cnt > 1){
if(nums[start] == 0){
cnt--;
}
start++;
}
max_ret = max(max_ret, i-start+1);
}
return max_ret;
}
第二种方法是用queue,
https://discuss.leetcode.com/topic/75445/java-clean-solution-easily-extensible-to-flipping-k-zero-and-follow-up-handled/2
public int findMaxConsecutiveOnes(int[] nums) {
if(nums == null || nums.length == 0) return 0;
Queue<Integer> q = new LinkedList<>();
int start = 0, max_ret = 0;
for(int i=0; i<nums.length; i++){
if(nums[i] == 0) q.offer(i);
while(q.size() > 1){
start = q.poll() + 1;
}
max_ret = Math.max(max_ret, i-start+1);
}
return max_ret;
}