代码解决
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]
,表示输入数组中的山峰元素索引。