# Greedy# Iteration# Array

i071 - 風景 (Landscape)

🔗 前往 ZeroJudge 原題

題目描述

題目給定一個包含 n 個整數的陣列 a,以及一個整數 m。目標是計算從 m 位置向左右兩邊延伸,有多少個位置上的數值比目前的最大值還要大。

解題思路

這題可以利用貪心法解決。首先,讀取陣列 a 和整數 m。然後,從 m 的左邊開始遍歷,如果遇到比目前最大值 t 大的數,就更新 t 並將答案 ans 加一。接著,從 m 的右邊開始遍歷,重複相同的操作。最後輸出答案 ans。

複雜度分析

  • 時間複雜度: O(n)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int n,m,a[1005],ans;
int main(){
	cin >> n >> m;
	for(int i=1;i<=n;++i){
		cin >> a[i];
	} 
	for(int i=m-1,t=a[m];i>0;--i){
		if(a[i]>t){
			t=a[i];
			++ans;
		}
	}
	for(int i=m+1,t=a[m];i<=n;++i){
		if(a[i]>t){
			t=a[i];
			++ans;
		}
	}
	cout << ans;
}

Discussion