题解 | #打印极值点下标# 机试指南 北大复试 首、末、中
打印极值点下标
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;
}
查看22道真题和解析
格力公司福利 247人发布