最长连续子序列问题 - Java

1. Max Consecutive Ones

给出一串由0,1组成的整型array

  1)求出最长连续的1序列 LC - 485

  思路:从1开始累加求最大值,遇0归零  

public int findMaxConsecutiveOnes(int[] nums) {
        int result = 0;
        int count = 0;
        
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 1) {
            count++;
            result = Math.max(count, result);
            }
            else count = 0;
        }
        
        return result;
    }

 

  2)求出只含一个0的最长连续序列

  思路:记录两段长度,left为0前长度,right为0后长度,遇到下一个0就,l = r,把数传递给left,right重新技术。每次循环求最大。

 

public int findMaxConsecutiveOnes(int[] nums) {
        int l = 0, r = 0;
        int res = 0;
        
        for(int i = 0 ; i < nums.length ; i++) {
            r++;
            if(nums[i] == 0) {
                l = r;
                r = 0;
            }
            res = Math.max(res, l + r);
        }
        
        
        return res;
    }

   3)最多K个0的最长子序列 - LC 1004

  思路:双指针left在左,right在右。遇到0递减K,同时如果K小于0左移left使slide window大小不变,并记录了欠的0的个数,当 left指针遇到 0 时补偿 K。

 

 

 

public int longestOnes(int[] A, int K) {
        
        int i = 0, j = 0;
        
        for(; j < A.length ; j++){
            if(A[j] == 0) K--;
            if(K < 0 && A[i++] == 0) K++;
        }
        
        return j - i;
    }

  其实也可以当K小于0时,用while loop一直左移left指针。。但上面思路的好处在于不需要单开一个整型存结果,slide window符合条件时会扩大,否则就右移

  

  

 

 

  

  

 

posted @ 2019-04-01 11:13  森淼clover  阅读(1452)  评论(0编辑  收藏  举报