普通版本
题目链接:2951. 找出峰值 - 力扣(LeetCode)
class Solution {
public:
vector<int> findPeaks(vector<int>& mountain) {
int sz = mountain.size();
vector<int> newMountain;
for(int i = 1;i < sz-1;i++)
{
int a = mountain[i-1];
int b = mountain[i];
int c = mountain[i+1];
if(b > a && b > c)
{
newMountain.push_back(i);
}
}
return newMountain;
}
};
注意vector的push_back、insert和[ ]三者对于自身元素处理的不同情况:
- push_back:用于向数组尾部插入新元素
- insert:用于向数组中得某个位置进行插入,需要传入要插入位置得迭代器
- [ ]:只能访问和修改已有元素,不能用于插入元素
优化版本
class Solution {
public:
vector<int> findPeaks(vector<int> &mountain) {
vector<int> res;
int i = 1;
while(i+1 < mountain.size())
{
if (mountain[i - 1] < mountain[i] && mountain[i] > mountain[i + 1])
{
res.push_back(i);
i+=2;
continue;
}
i++;
}
return res;
}
};
- 省去了用变量存储数组中的值
- 当i位置为峰值时,i+1位置就不可能是峰值,可以直接跳过
~over~