美文网首页
Max Consecutive Ones II (Leetcod

Max Consecutive Ones II (Leetcod

作者: stepsma | 来源:发表于2017-01-20 05:09 被阅读0次

是一道前向双指针题,类似于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;
    }

相关文章

网友评论

      本文标题:Max Consecutive Ones II (Leetcod

      本文链接:https://www.haomeiwen.com/subject/krdwbttx.html