最長連續子序列問題 - 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符合條件時會擴大,否則就右移

  

  

 

 

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM