牛客算法-拆分序列

牛客算法-拆分序列

題目描述:
牛牛定義排序子序列爲個數組中一 段連續的子序列,並且這段子序列是非遞增或者非遞減排序的。牛牛有個長度爲n的整數數組A,他現在有 個任務是把數組A分爲若干段排序子序列,牛牛想知道他最少可以把這個數組分爲幾段排序子序列,如樣例所示,牛牛可以把數組A劃分爲[1,2,3]和[2,2, 1兩個排序子序列,至少需要劃
分爲2個排序子序列,所以輸出2

輸入描述:
輸入的第一行爲一個正整數:(1≤n≤10^5)
第二行包括n個整數a_i(1≤a_i≤10個9),表示數組A的每個數字

輸出描述:
輸出一個整數表示牛牛可以將A最少劃分爲多少段排序子序列

思路:使用一個標誌位來依據數組的遞增或遞減來判斷數組是否連續,不連續則可以拆分一次

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
	int number=0,flag=0,subnumber=1;
	cin>>number;
	if(number==0){
		printf("%d",0);exit(0);
	}
	int arr[number];
	for(int index=0;index<number;index++){
		cin>>arr[index];
	}
	for(int index=1;index<number;index++){
		//當前值與前一個值相同時,flag不發生變化
		if(arr[index-1]==arr[index]){
			continue;
		} 
		if(arr[index-1]<arr[index]){
			if(flag==0){ //當數組爲遞增時flag設置爲1 
				flag=1;
			}
			if(flag==-1){ //當數組遞增且flag爲-1時表示此時數組由遞減轉爲遞增 
				flag=0;
				subnumber++;
			}
		}else if(arr[index-1]>arr[index]){
			if(flag==0){  //當數組爲遞減時flag設置爲-1 
				flag=-1;
			}
			if(flag==1){ //當數組遞減且flag爲1時表示此時數組由遞增轉爲遞減 
				flag=0;
				subnumber++;
			}
		}
	}
	
	printf("%d",subnumber);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章