文章

12

粉丝

0

获赞

0

访问

1.9k

头像
2025 年 6 月第 1 次 408 月考试卷 - 第41题回答
数据结构
发布于2025年8月15日 16:19
阅读数 107

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分

理由:学生给出了基本的设计思想,包括统计峰和谷的下标,以及倒序遍历寻找峰的最大谷。但未明确说明如何高效计算最大差值,且未提及如何处理无峰或无谷的情况。思路基本正确但不够完整。

...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发