
代码解决
class Solution { public:// 函数用于找到山峰元素的索引vector<int> findPeaks(vector<int>& mountain) {vector<int> result; // 用于存储山峰元素的索引// 遍历数组,从第二个元素到倒数第二个元素for(int i = 1; i + 1 < mountain.size(); i++) {// 如果当前元素大于前一个元素且大于后一个元素,则它是一个山峰if(mountain[i - 1] < mountain[i] && mountain[i] > mountain[i + 1]) {result.push_back(i); // 将山峰的索引加入结果向量}}return result; // 返回所有山峰的索引} };详细解释
函数签名:
vector<int> findPeaks(vector<int>& mountain):函数接受一个引用类型的整数向量作为输入,并返回一个包含所有山峰元素索引的整数向量。定义结果向量:
vector<int> result;:用于存储山峰元素的索引。遍历数组:
for(int i = 1; i + 1 < mountain.size(); i++):从第二个元素(索引1)到倒数第二个元素(索引mountain.size() - 2)进行遍历。这样可以确保在检查mountain[i]时,mountain[i-1]和mountain[i+1]都是有效的索引。检查山峰条件:
if(mountain[i - 1] < mountain[i] && mountain[i] > mountain[i + 1]):判断当前元素是否大于其前一个元素且大于其后一个元素。如果满足条件,则当前元素是一个山峰。记录山峰索引:
result.push_back(i);:将当前山峰的索引添加到结果向量中。返回结果:
return result;:返回包含所有山峰索引的结果向量。例子
假设输入数组为:
[1, 3, 7, 8, 7, 5, 3, 2]根据代码逻辑:
- 对于索引
i = 1,mountain[0] = 1,mountain[1] = 3,mountain[2] = 7,不满足山峰条件。- 对于索引
i = 2,mountain[1] = 3,mountain[2] = 7,mountain[3] = 8,不满足山峰条件。- 对于索引
i = 3,mountain[2] = 7,mountain[3] = 8,mountain[4] = 7,满足山峰条件,索引3加入结果。- 对于索引
i = 4,mountain[3] = 8,mountain[4] = 7,mountain[5] = 5,不满足山峰条件。- 对于索引
i = 5,mountain[4] = 7,mountain[5] = 5,mountain[6] = 3,满足山峰条件,索引5加入结果。最终结果为
[3, 5],表示输入数组中的山峰元素索引。