牛牛定義排序子串行為乙個陣列中一段連續的子串行,並且這段子序列是非遞增或者非遞減排序的。牛牛有乙個長度為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 3using
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 ...