C++代码:求解n天后树的高度


假设我们有一个包含n个元素的数组A。A的元素要么是0要么是1。有一棵树。在连续的n天里,如果A[i]是0,则不浇水;如果A[i]是1,则浇水,花朵的生长方式如下:

  • 如果树连续两天不浇水,它就会枯死。

  • 如果在第i天浇水,它会生长1厘米。

  • 如果连续两天(第i天和第i+1天)浇水,它会生长5厘米而不是1厘米。

  • 如果在第i天不浇水,它就不会生长。

一开始,树高1厘米。我们需要找到n天后树的高度。如果它死了,则返回-1。

因此,如果输入类似于A = [0, 1, 1],则输出将是7,因为第一天它不会生长,所以高度是1,第二天高度将是2,然后第三天它将是2 + 5 = 7。

步骤

为了解决这个问题,我们将遵循以下步骤:

r := 1
y := 0
n := size of A
for initialize i := 0, when i < n, update (increase i by 1), do:
   x := A[i]
   if r is same as -1, then:
      Ignore following part, skip to the next iteration
   if x is non-zero and y is non-zero, then:
      r := r + 5
   otherwise when x is non-zero, then:
      (increase r by 1)
   otherwise when not x is non-zero and not y is non-zero and i > 0, then:
      r := -1
   y := x
return r

示例

让我们来看下面的实现来更好地理解:

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A){
   int r = 1;
   int y = 0;
   int n = A.size();
   for (int i = 0; i < n; ++i){
      int x = A[i];
      if (r == -1)
         continue;
      if (x && y)
         r += 5;
      else if (x)
         ++r;
      else if (!x && !y && i > 0)
         r = -1;
      y = x;
   }
   return r;
}
int main(){
   vector<int> A = { 0, 1, 1 };
   cout << solve(A) << endl;
}

输入

{ 0, 1, 1 }

输出

7

更新于:2022年3月15日

浏览量:169

开启你的职业生涯

完成课程获得认证

开始学习
广告