給定整數數組,若某元素嚴格大於其相鄰元素,或嚴格小於其相鄰元素,則稱該位置為極值點。輸出所有極值點的下標(從 0 開始)。多組測試數據。
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
while (cin >> n) {
while (n--) {
int k; cin >> k;
vector a(k);
for (int i = 0; i < k; i++) cin >> a[i];
vector peaks;
if (k == 1) { peaks.push_back(0); } // 單元素視為極值點
else {
if (a[0] != a[1]) peaks.push_back(0);
for (int i = 1; i < k-1; i++) {
if ((a[i] > a[i-1] && a[i] > a[i+1]) ||
(a[i] < a[i-1] && a[i] < a[i+1]))
peaks.push_back(i);
}
if (a[k-1] != a[k-2]) peaks.push_back(k-1);
}
for (size_t i = 0; i < peaks.size(); i++) {
if (i) cout << ' ';
cout << peaks[i];
}
cout << '\n';
}
}
return 0;
}
簡單模擬題,關鍵在於正確處理首尾邊界與相等情況。用 vector 存儲結果最後統一輸出可避免格式錯誤(PE)。