排序子序列
題目解析:
??本題要求解的是排序子序列,排序子序列為非遞增或者非遞減,很多同學在這個非遞增、非遞減問題上很糾結,注意:非遞減就是a[i]<=a[i+1],遞減就是a[i]>a[i+1],非遞增就是a[i]>=a[i+1],遞增就是a[i]<a[i+1]。
解題思路:
??通過上面理解了排序子序列,這個題的本質就是去找這里圖里面的波峰和波谷。但是存在一個特殊情況,就是如果波峰有兩個,但是只有四個數,由于數列最少是兩個數,所以只能分成兩個子序列,而不是三個。
圖解思路:
一般情況:
特殊情況
直接上代碼
#include <iostream> #include <vector>using namespace std;int main() {int num = 0;vector<int> arr;int ret = 1;cin >> num;arr.resize(num);for(int i = 0; i < num; i++)cin >> arr[i];for(int i = 1; i < num-1; ++i){if((arr[i-1] > arr[i] && arr[i] < arr[i+1])|| (arr[i-1] < arr[i] && arr[i] > arr[i+1])){ret++;if(i != num-3)i++;}}cout << ret << endl;return 0; }總結
- 上一篇: 一文读懂类加载机制 --- ClassL
- 下一篇: 内网穿透 --- frp