题解 | #打印极值点下标# 机试指南 北大复试 首、末、中

打印极值点下标

https://www.nowcoder.com/practice/7fd72f8ac7964ba3b8baa8735246e1f1

//求极值点而不是最值,极值点还包括两端的端点和鞍点 要考虑全面 否则很容易出错

// 由案例可以看到,如果数组的始端不等于后一个,则输出首位的下标,即0

//如果在数组的最后一位,最后一位不等于其前一位,也直接输出末位下标

//去除首位,中间部分可以按照 “对于下标为i的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数”判断

北京大学的复试题可不是这么简单呜呜 还是要考虑全面啊!!!!!!!!!!

//2023-4-16 http://t.cn/E9ehDw4 王道机试指南 查找
#include<iostream>
#include<algorithm>//sort所在头文件 
using namespace std;
//求极值点而不是最值,极值点还包括两端的端点和鞍点 要考虑全面 否则很容易出错
// 由案例可以看到,如果数组的始端不等于后一个,则输出首位的下标,即0
//如果在数组的最后一位,最后一位不等于其前一位,也直接输出末位下标
//去除首位,中间部分可以按照 “对于下标为i的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数”判断
int main() {
    int k;
    int data[81];
    while (scanf("%d", &k) != EOF) {
        for (int i = 0; i < k; i++)
            scanf("%d", &data[i]); //输入数据
        for (int j = 0; j < k;
                j++) { //接下来就是“无脑”遍历数组 ,考虑三种情况
            if (j == 0) { //首端
                if (data[j] != data[j + 1])
                    cout << j << ' ';
            } else if (j == k - 1) { //末端
                if (data[j] != data[j - 1])
                    cout << j << ' ';
            } else {
                if ((data[j] > data[j + 1] && data[j] > data[j - 1]) ||
                        (data[j] < data[j + 1] && data[j] < data[j - 1]) )
                    cout << j << ' ';
            }
        }
        cout << endl;
    }
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务