排序子串行 全國模擬(三)

2022-08-24 01:45:11 字數 1542 閱讀 4190

牛牛定義排序子串行為乙個陣列中一段連續的子串行,並且這段子序列是非遞增或者非遞減排序的。牛牛有乙個長度為n的整數陣列a,他現在有乙個任務是把陣列a分為若干段排序子串行,牛牛想知道他最少可以把這個陣列分為幾段排序子串行.

如樣例所示,牛牛可以把陣列a劃分為[1,2,3]和[2,2,1]兩個排序子串行,至少需要劃分為2個排序子串行,所以輸出2 

輸入描述:

輸入的第一行為乙個正整數n(1 ≤ n ≤ 10^5) 第二行包括n個整數a_i(1 ≤ a_i ≤ 10^9),表示陣列a的每個數字。

輸出描述:

輸出乙個整數表示牛牛可以將a最少劃分為多少段排序子串行

輸入例子:

6 1 2 3 2 2 1

輸出例子:

2解題思路:

1)本題依次比較整個陣列

2)a[i+1]>a[i] ,則進入大於操作,直到遍歷到下乙個值不大於等於為止count++,然後進行下一位置的判斷

3)a[i+1]

4)a[i+1] == a[i]不進行操作,進行下一位置遍歷

本題注意點:

1)本題開始比較a[i+1]與a[i]進行比較,為了避免越界,陣列定義為n+1個,同時給a[n] = 0;

分為三種情況,若到a[n-1] 的最後一組是非遞減序列,a[n]=0  在增遍歷中執行完i=n-1 for迴圈使得i=n,不執行for迴圈結束,因此不影響

第二種情況  若到a[n-1] 的最後一組是非遞增序列,a[n]=0  在減遍歷中執行完i=n-1 for迴圈使得i=n,不執行for迴圈結束,因此不影響

第三種情況  1 2 1 2 1最後乙個數是單獨的情況,執行完最後一組1 2 i=3 ,for迴圈i++,此時i=4, <=4 繼續執行,此時a[5]為0,a[4]

所以a[n]為0保證了結果的正確性。因此成立

2)本題中全部相等情況,只執行了i++,未對count進行其他相應處理,所以全部相等情況應進行特殊處理。首先定義equal,每次相等equal++,n個數,共有n-1組相等,因此當equal==n-1表示全部相等的情況,此時應輸出1

1 #include 2 #include 3

using

namespace

std;45

intmain()

617 a[n] = 0;18

if(n==1)19

22for(int i=0;i<=n;i++)

2326

for(int i=0;i<=n-1;i++)

2736

37 count++;

3839}40

else

if(a[i+1] 4147

48 count++;

4950}51

else

5256}57

if(equal == n-1

)58 cout<<1

<59else

60 cout6162}63

return0;

64 }

訓練部隊 全國模擬(三)

程式設計題 訓練部隊 時間限制 1秒 空間限制 32768k 小牛牛是牛牛王國的將軍,為了訓練出精銳的部隊,他會對新兵進行訓練。部隊進入了n個新兵,每個新兵有乙個戰鬥力值和潛力值,當兩個新兵進行決鬥時,總是戰鬥力值高的獲勝。獲勝的新兵的戰鬥力值就會變成對手的潛力值 自己的戰鬥力值 對手的戰鬥力值。敗...

排序子串行

題目描述 牛牛定義排序子串行為乙個陣列中一段連續的子串行,並且這段子序列是非遞增或者非遞減排序的。牛牛有乙個長度為n的整數陣列a,他現在有乙個任務是把陣列a分為若干段排序子串行,牛牛想知道他最少可以把這個陣列分為幾段排序子串行.如樣例所示,牛牛可以把陣列a劃分為 1,2,3 和 2,2,1 兩個排序...

排序子串行

問題描述 將一段陣列分為若干個排序子串行,排序子串行就是非遞增或非遞減的排序序列,然後輸出至少可以分為幾個排序子串行。解決方法 輸入陣列之後,開始遍歷陣列,如果陣列滿足非遞增或者非遞減,就進入對應的條件判斷,然後此時如果i 1的元素依然滿足對應的非遞增或非遞減,就直接i 然後跳出之後進行count ...