企業(yè)微信網(wǎng)站建設(shè)東莞做網(wǎng)站哪里好
題目描述
在數(shù)列a_1 ,a_2,?,a_n 中,如果a_i <a_i+1 <a_i+2<?<a_j,則稱(chēng) a_i至 a_j為一段遞增序列,長(zhǎng)度為 j?i+1。
定一個(gè)數(shù)列,請(qǐng)問(wèn)數(shù)列中最長(zhǎng)的遞增序列有多長(zhǎng)。
輸入描述
輸入的第一行包含一個(gè)整數(shù) n。
第二行包含 n 個(gè)整數(shù) a 1 ,a 2 ,?,a n ,相鄰的整數(shù)間用空格分隔,表示給定的數(shù)列。
其中,2≤n≤1000,0≤數(shù)列中的數(shù)≤10^4
。
輸出描述:
輸出一行包含一個(gè)整數(shù),表示答案。
輸入輸出樣例
示例
輸入
7
5 2 4 1 3 7 2
輸出
3
運(yùn)行限制
最大運(yùn)行時(shí)間:1s
最大運(yùn)行內(nèi)存: 256M
所需變量
int a[1005];//將每個(gè)數(shù)都存進(jìn)數(shù)組int sum = 0;//代表目前最長(zhǎng)的遞增個(gè)數(shù)
int max = 0;//代表所存儲(chǔ)的最長(zhǎng)遞增個(gè)數(shù)
int i;//循環(huán)變量
int n;//輸入的要輸入幾個(gè)數(shù)
思路:
我們首先將每個(gè)數(shù)都存入數(shù)組中,存入后,我們將逐個(gè)判斷,如果他比前一個(gè)大那就代表他是遞增的,那我們就讓sum++,直到遇到不大的,那我們就判斷目前的sum跟我們存儲(chǔ)的最大max之間的關(guān)系,如果sum比max大,那么說(shuō)明我們需要更新max的值,那么我們將sum賦值給max,并且將sum賦值為1,然后接著循環(huán)下去!
for(i = 1;i<n;i++){cin>>a[i];if(a[i-1]<a[i]){sum++;continue;}else{if(sum>max){max = sum;}sum = 1;}}
該算法本人認(rèn)為比較優(yōu),如果有更好的想法,歡迎q我!
最后將自己的思路整體梳理一下得到以下代碼(編譯器是dev,語(yǔ)言是C語(yǔ)言):
#include <iostream>
using namespace std;
int main()
{int a[1005] = {0},sum = 0,max = 0,i,n;cin>>n;cin>>a[0];sum = 1;for(i = 1;i<n;i++){cin>>a[i];if(a[i-1]<a[i]){sum++;continue;}else{if(sum>max){max = sum;}sum = 1;}}cout<<max<<endl;return 0;
}