题解 | #打印极值点下标# 机试指南 北大复试 首、末、中
打印极值点下标
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; }