408每日演算法——連續子陣列長度(2016年清華912)
阿新 • • 發佈:2021-07-07
連續子陣列長度
一、問題描述
求一個數組A中連續相同數字的和等於s的最長子陣列長度
例如A={1,1,2,1,1,1,2,1},s=3,最終返回3
要求演算法時間複雜度不超過On),空間複雜度不超過O(1)
二、演算法思路
快慢指標:可以設計一個快指標f,一個慢指標s,遍歷過程中,如果f.value==s.value,則f++,同時記錄一個長度count++,count初值為0,當f.value != s.value時讓s=f,同時計算mlength=max(count,mlenght),然後更新count=0;
三、程式碼
1 #include <cstdio> 2#include <algorithm> 3 using namespace std; 4 int main(){ 5 int n; 6 scanf("%d",&n); 7 int A[n]; 8 for(int i=0;i<n;i++){ 9 scanf("%d",&A[i]); 10 } 11 //以上為測試用例的構造,不計入時間複雜度 12 int mlenght=0,count=0,f=0,s=0; 13 while(f<n){ 14 if(A[f]==A[s]){15 f++; 16 count++; 17 }else{ 18 s=f; 19 mlenght = max(count,mlenght); 20 count = 0; 21 } 22 } 23 mlenght = max(count,mlenght); 24 printf("%d",mlenght); 25 return 0; 26 }