最長子序列

來源:互聯網
上載者:User

標籤:style   blog   color   os   io   for   art   ar   

在給定的序列中尋找最長的無重複子序列;

利用map<int,int>object標記每個數位序號,如果這個數字重複過,那麼就能確定他們之間的一個序列長度,然後起點更新到出現的重複的點上,

從這個點開始向後再次找無重複序列,然後每次對比它的長度和上一次確定的序列的長度,如果新序列的長度大於前一個長度就更新它,並且更新終點。

 

 1 #include<iostream> 2 #include<map> 3 using namespace std; 4 const int N=120; 5 int array[N]; 6 int starti,endi,start; 7 int main() 8 { 9     int n;10     while(cin>>n)11     {12         map<int,int>my_map;13         for(int i=1;i<=n;i++)14         {15             cin>>array[i];16         }17         int l=0,temp;18         starti=endi=start=1;19         for(int i=1;i<=n;i++)20         {21             if(my_map[array[i]]!=0)22             {23                 temp=my_map[array[i]]+1;24                 if(start<temp)start=temp;//如果起點向前了,就更換新的起點 25             }26             else if(l<i-start+i)//如果在新的起點到現在點距離大於原來的長度,就更新長度和終點27             {28                 l=i-start+1;29                 endi=i;30             }31             my_map[array[i]]=i;32         }33         cout<<l<<endl;34         cout<<"startpoint: "(endi-l)<<" endpoint: "<<endi<<endl;35     }36     return 0;37 }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.