# Array# Greedy# Iteration

e664 - 108 p2. 空氣盒子

🔗 前往 ZeroJudge 原題

題目描述

題目給定一串數字,要求找出其中一個局部最大值。如果存在連續相同的值,則將它們視為一個整體。如果找到符合條件的局部最大值,則輸出其位置和值;否則,輸出 "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";
}

Discussion