習題3.4 最長連續遞增子序列
阿新 • • 發佈:2018-12-24
習題3.4 最長連續遞增子序列(20 分)
給定一個順序儲存的線性表,請設計一個演算法查詢該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)。
輸入格式:
輸入第1行給出正整數n(≤105);第2行給出n個整數,其間以空格分隔。
輸出格式:
在一行中輸出第一次出現的最長連續遞增子序列,數字之間用空格分隔,序列結尾不能有多餘空格。
AC程式碼:/*最長連續遞增子序列*/ #include<stdio.h> struct node { int b;//儲存當前數的數值 int k;//記錄該數開始的遞增情況 } s[100001]; int main() { int i,j; int n; int maxi=1,c; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&s[i].b); for(i=0;i<n;i++) s[i].k=1; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { //判斷是否為遞增的,後面的大於前面的,即為遞增 if(s[j].b>s[j-1].b) s[i].k++; else break; } } for(i=0;i<n;i++) { if(s[i].k>maxi) //連續遞增的數的個數大於當前最大值 { maxi=s[i].k; c=i;//從i開始的序列 } } for(i=c;i<c+maxi-1;i++) printf("%d ",s[i].b); printf("%d\n",s[c+maxi-1].b); return 0; }