Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

สามารถวางดอกไม้ใน C++


สมมติว่าเรามีแปลงดอกไม้ยาวซึ่งบางแปลงปลูกแล้วบางส่วนว่างเปล่า ขณะนี้มีข้อ จำกัด คือ ดอกไม้ไม่สามารถปลูกในแปลงที่อยู่ติดกันได้ พวกเขาจะแย่งน้ำและตายทั้งคู่ ดังนั้นถ้าเรามีแปลงดอกไม้ แทนด้วยอาร์เรย์ที่มี 0 และ 1, 0 หมายถึงว่าง และ 1 หมายถึงเติม และให้หมายเลข n ด้วย เราต้องตรวจสอบว่าสามารถปลูกดอกไม้ใหม่ n ดอกได้หรือไม่โดยไม่ละเมิดข้อ ติดดอกหรือไม่

ดังนั้น หากอินพุตเหมือนแปลงดอกไม้ =[1,0,0,0,1] n =1 ผลลัพธ์จะเป็น True

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ถ้าขนาดของแปลงดอกไม้

    • คืนค่าเท็จ

  • หากขนาดของแปลงดอกไม้เท่ากับ 1 และแปลงดอกไม้[0] เท่ากับ 0 และ n เท่ากับ 1 แล้ว −

    • คืนความจริง

  • สำหรับการเริ่มต้น i :=0 เมื่อฉัน <ขนาดของเตียงดอกไม้ ให้อัปเดต (เพิ่ม i ขึ้น 1) ทำ -

    • ถ้า n> 0 แล้ว −

      • ถ้าฉันเหมือนกับ 0 แล้ว −

        • ถ้า flowerbed[i] เหมือนกับ 0 และ flowerbed[1] เหมือนกับ 0 แล้ว −

          • แปลงดอกไม้[0] :=1

          • (ลดลง n โดย 1)

      • มิฉะนั้นเมื่อฉันมีขนาดเท่ากับเตียงดอกไม้ - 1 แล้ว −

        • ถ้าแปลงดอกไม้[i] เท่ากับ 0 และแปลงดอกไม้[i - 1] ไม่เท่ากับ 1 ดังนั้น −

          • แปลงดอกไม้[i] :=1

          • (ลดลง n โดย 1)

      • มิฉะนั้น เมื่อ flowerbed[i] เหมือนกับ 0 และ flowerbed[i + 1] เหมือนกับ 0 และ flowerbed[i - 1] เหมือนกับ 0 ดังนั้น −

        • แปลงดอกไม้[i] :=1

        • (ลดลง n โดย 1)

    • ถ้า n เท่ากับ 0 แล้ว −

      • คืนความจริง

  • ถ้า n เท่ากับ 0 แล้ว −

    • คืนความจริง

  • คืนค่าเท็จ

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool canPlaceFlowers(vector<int>& flowerbed, int n) {
      if (flowerbed.size() < n)
         return false;
      if (flowerbed.size() == 1 && flowerbed[0] == 0 && n == 1)
         return true;
      for (int i = 0; i < flowerbed.size(); i++) {
         if (n > 0) {
            if (i == 0) {
               if (flowerbed[i] == 0 && flowerbed[1] == 0) {
                  flowerbed[0] = 1;
                  n--;
               }
            }
            else if (i == flowerbed.size() - 1) {
               if (flowerbed[i] == 0 && flowerbed[i - 1] != 1) {
                  flowerbed[i] = 1;
                  n--;
               }
            }
            else if (flowerbed[i] == 0 && flowerbed[i + 1] == 0 && flowerbed[i - 1] == 0) {
flowerbed[i] = 1;
               n--;
            }
         }
         if (n == 0) {
            return true;
         }
      }
      if (n == 0) {
         return true;
      }
      return false;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,0,0,0,1};
   cout << (ob.canPlaceFlowers(v, 1));
}

อินพุต

{1,0,0,0,1}, 1

ผลลัพธ์

1