# Array# Greedy# Iteration

f072 - 3. 家裡的後花園 (Garden)

🔗 前往 ZeroJudge 原題

題目描述

題目給定一個整數陣列,代表一塊花園,其中 1 代表有花,0 代表沒有花,9 代表籬笆。要求計算花園中沒有花且左右都不是籬笆的格子數量。

解題思路

這題的解題思路是先找到花園中最左邊和最右邊的花的位置。然後遍歷這段花園,對於每個格子,如果它是沒有花的格子(值為 0),並且它的左右鄰居都不是籬笆(值不為 9),那麼就將計數器加一。

複雜度分析

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

程式碼

#include <stdio.h>
int a[26];
int main(){
	int n=0,ans=0,i;
	scanf("%d",&n);
	int l=n,r=0;
	for(i=0;i<n;++i)
		scanf("%d",&a[i]);
	for(i=0;i<n;++i){
		if(a[i]==1){
			l=i;
			break;
		}
	}
	for(i=n-1;i>=0;--i){
		if(a[i]==1){
			r=i;
			break;
		}
	}
	for(i=l;i<=r;++i)
		if(a[i]==0&&a[i+1]!=9&&a[i-1]!=9)
			++ans;
	printf("%d",ans);
}

Discussion