文章
12
粉丝
0
获赞
0
访问
1.9k
1. 先统计数组中是峰或者谷的下标,然后再倒序遍历统计每一个峰的最大谷, 同时维护最大谷的下标。
vector<pair<int, int>> find(std::vector<int> nums)
{
int n = nums.size();
std::vector<int> st1(n + 1), st2(n + 1); // 标记是否为峰或者谷
// 统计峰和谷
for(int i = 1; i < nums.size() - 1; i++) if(nums[i] > nums[i - 1] && nums[i] > nums[i + 1]) st1[i] = 1;
for(int i = 1; i < nums.size() - 1; i++) if(nums[i] < nums[i - 1] && nums[i] < nums[i + 1]) st2[i] = 1;
int j = 0, mx = -1;
vector<pair<int, int>> res;
// 寻找峰的最大谷
for(int i = n - 1; i >= 1; i--)
{
if(st1[i] && mx != -1) res.push_back({i, j});
// 维护最大谷
if(st2[i] && mx < nums[i])
{
mx = nums[i];
j = i;
}
}
return res;
}
3. 时间复杂度O(n), 空间复杂度O(n)
评分及理由
(1)得分及理由(满分4分)
得分:3分
理由:学生给出了基本的设计思想,包括统计峰和谷的下标,以及倒序遍历寻找峰的最大谷。但未明确说明如何高效计算最大差值,且未提及如何处理无峰或无谷的情况。思路基本正确但不够完整。
...
登录后发布评论
暂无评论,来抢沙发