普通版本
题目链接: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~