※ 引述《dont (dont)》之銘言:
: 1671. Minimum Number of Removals to Make Mountain Array
: ## 思路
嗯嗯差不多
大家想的都跟我一樣
雖然我沒有很認真看
嚴格山
山頂往左遞減
往右也遞減
##
左邊掃過去右邊掃過來
對每個index記他的level
lv意思是以這個點當山頂有多高
就是前面可以留幾ㄍ
同lv更新成最小的number
我都會忘記可以用lower_bound
不過len < 1000
有沒有二分搜沒什麼差的感覺
最後再check要刪幾個
長度 - lv
class Solution {
public:
int minimumMountainRemovals(vector<int>& nums) {
// find peak
// left wing, right wing
// scan from both side to another
int n = nums.size();
vector<int> inc(n, 0), dec(n, 0); //increase, decrease
vector<int> level;
level.push_back(nums[0]);
for(int i = 1; i < n; i++){
int lv = ranges::lower_bound(level, nums[i]) - level.begin();
inc[i] = lv;
if(lv == level.size()){
level.push_back(nums[i]);
}
else if(level[lv] > nums[i]){
level[lv] = nums[i];
}
}
level.resize(0);
level.push_back(nums[n-1]);
for(int i = n-1 - 1; i >= 0; i