e664 - 108 p2. 空氣盒子
題目描述
題目給定一串數字,要求找出其中一個局部最大值。如果存在連續相同的值,則將它們視為一個整體。如果找到符合條件的局部最大值,則輸出其位置和值;否則,輸出 "0 0"。
解題思路
程式碼遍歷輸入的數字陣列。對於每個元素,它檢查該元素是否大於其前一個元素。如果是,則進入一個迴圈,跳過所有連續相同的元素。在跳過相同元素後,它檢查當前元素是否大於其下一個元素。如果滿足這個條件,則表示找到了一個局部最大值,並輸出其位置和值。如果遍歷完整個陣列後沒有找到局部最大值,則輸出 "0 0"。
複雜度分析
- 時間複雜度: O(n),其中 n 是輸入數字的個數。程式碼遍歷陣列一次。
- 空間複雜度: O(1),程式碼只使用固定大小的陣列來儲存輸入數字,不使用額外的空間。
程式碼
#include <iostream>
using namespace std;
int a[50],n,l,r,ac;
int main(){
while(cin >> a[n++]);
for(int i=1;i<n-1;++i){
if(a[i]>a[i-1]){
int it=i;
while(a[i]==a[i+1])++i;
if(i<n-2&&a[i]>a[i+1]){
ac=1;
if(it!=i)
cout << it+1 << " " << i+1 << " " << a[it] << "\n";
else
cout << it+1 << " " << a[it] << "\n";
}
}
}
if(ac==0)cout << "0 0";
}