演算法 演算法測試題5 牛牛的數列 最長連續子串行

2021-09-13 10:45:06 字數 2289 閱讀 2446

牛牛現在有乙個n個數組成的數列,牛牛現在想取乙個連續的子串行,並且這個子串行還必須得滿足:最多隻改變乙個數,就可以使得這個連續的子串行是乙個嚴格上公升的子串行,牛牛想知道這個連續子串行最長的長度是多少。

輸入包括兩行,第一行包括乙個整數n(1 ≤ n ≤ 10^5),即數列的長度;

第二行n個整數a_i, 表示數列中的每個數(1 ≤ a_i ≤ 10^9),以空格分割。

輸出乙個整數,表示最長的長度。
輸入

6 7 2 3 1 5 6

輸出5

分析:這道題目看上去沒法下手,就當學習乙個思路吧,首先根據當前陣列順著求一遍以每個位置作為結尾的連續最長遞增子串行的長度值,再逆著求解以每個元素作為開頭的連續最長遞增子串行的長度值,然後根據這兩組值來找連線點。具體就拿體重的例子來說,此時陣列arr為

7 2 3 1 5 6,我們定義兩個陣列left

和right,left陣列表示正著求以每個元素作為結尾的最長遞增子串行的長度,而right陣列表示逆著以每個元素作為開頭的連續最長遞增子串行的長度值,所以可以知道left[0]=1,表示以7結尾的目前最長的連續遞增子串行的長度值就是1,依次left[1]=1,left[2]=2,left[3]=1,left[4]=2,left[5]=3;

而right[5]=1,right[4]=2,right[3]=3,right[2]=1,right[1]=2,right[0]=1;好了,到此為止兩個輔助的陣列已經求出,接下來就要找連線點了,是這樣的,根據題目意思,我們要找乙個子串行,而且之多改變乙個數就可以形成嚴格的連續遞增子串行,所以我們先盯住陣列中2這個數,我們發現以7結尾的最長的連續遞增子串行的長度為left[0],而以3開頭的連續遞增子串行長度為right[2],這樣,我們其實不用管7和3之間的數到底是多少,是2也好,不是2也好,只要2前面的數7能夠嚴格小於2後面的數3,說明通過改變7和3之間這個數至合適的數值則,這兩部分就可以連成乙個連續的嚴格遞增子串行,所有,我們遍歷所有這樣的點,記錄滿足條件的最大的長度再加1即可。

let n = parseint(readline());

let t1 = readline();

let t2 = new string(t1);

let line = t2.split(" ");

let arr = new array();

for(let i = 0; i < line.length; i++)

let left = new array(n);

let right = new array(n);

let ans = 0;

for(let i = 0; i < arr.length; i++)

for(let i = arr.length - 1; i >= 0; i--)

for(let i = 1 ; i < arr.length-1; i++)

}}print(ans+1);

function computeleft(pos, arr)else

}return count;

}function computeright(pos, arr)else

}return count;

}

let n = parseint(readline());

let t1 = readline();

let t2 = new string(t1);

let line = t2.split(" ");

let arr = new array();

for(let i = 0; i < line.length; i++)

let left = new array(n);//以arr[i]結尾的連續序列長度

let right = new array(n);//以arr[i]開頭的連續序列長度

let ans = 0;

left[0] = 1;

right[0] = 1;

for(let i = 1; i < arr.length; i++)else

//left[i] = computeleft(i, arr);

}for(let i = arr.length - 1; i >= 0; i--)else

//right[i] = computeright(i, arr);

}for(let i = 1 ; i < arr.length-1; i++)

}}print(ans+1);

演算法 演算法測試題3 操作序列

小易有乙個長度為n的整數序列,a 1,a n。然後考慮在乙個空序列b上進行n次以下操作 1 將a i放入b序列的末尾 2 逆置b序列 小易需要你計算輸出操作n次之後的b序列。輸入包括兩行,第一行包括乙個整數n 2 n 2 10 5 即序列的長度。第二行包括n個整數a i 1 a i 10 9 即序列...

藍橋杯測試題 演算法訓練1 區間k大數查詢

問題描述 給定乙個序列,每次詢問序列中第l個數到第r個數中第k大的數是哪個。輸入格式 第一行包含乙個數n,表示序列長度。第二行包含n個正整數,表示給定的序列。第三行包含乙個正整數m,表示詢問個數。接下來m行,每行三個數l,r,k,表示詢問序列從左往右第l個數到第r個數中,從大往小第k大的數是哪個。序...

測試題 wx5c99da787fd83的部落格

1.將 etc fstab中的空行刪除顯示到終端 sed d etc fstab2.只列印 etc fstab第2到第5行 sed n 2,5p etc fstab3.將 etc fstab中的 替換為 sed s g etc fstab4.解壓test.tar.gz到 tmp test1目錄下,顯...