forked from vns9/binarysearch.com
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathFind Local Peaks Sequel.cpp
49 lines (48 loc) · 1.5 KB
/
Find Local Peaks Sequel.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// https://binarysearch.com/problems/Find-Local-Peaks-Sequel
vector<int> solve(vector<int>& nums) {
vector<int> ans;
pair<int,int> prev1={-1,0};
pair<int,int> prev2={-1,0};
int index=0;
while(index<nums.size()){
int currcnt=0;
for(int i=index; i<nums.size(); i++){
if(nums[i]!=nums[index]){
break;
}
else currcnt++;
}
if(prev1.first==-1){
prev1={index,currcnt};
}
else if(prev2.first==-1){
if(prev1.first==0 && nums[index]<nums[0]){
for(int j=prev1.first; j<prev1.first+prev1.second; j++){
ans.push_back(j);
}
}
if(index+currcnt==nums.size() && nums[prev1.first]<nums[index]){
for(int j=index; j<nums.size(); j++){
ans.push_back(j);
}
}
prev2={index,currcnt};
}
else{
if(nums[prev2.first]>nums[index]&&nums[prev2.first]>nums[prev1.first]){
for(int j=prev2.first; j<prev2.first+prev2.second; j++){
ans.push_back(j);
}
}
if(index+currcnt==nums.size() && nums[prev2.first]<nums[index]){
for(int j=index; j<nums.size(); j++){
ans.push_back(j);
}
}
prev1=prev2;
prev2={index,currcnt};
}
index=index+currcnt;
}
return ans;
}