สมมติว่าเรามีแปลงดอกไม้ยาวซึ่งบางแปลงปลูกแล้วบางส่วนว่างเปล่า ขณะนี้มีข้อ จำกัด คือ ดอกไม้ไม่สามารถปลูกในแปลงที่อยู่ติดกันได้ พวกเขาจะแย่งน้ำและตายทั้งคู่ ดังนั้นถ้าเรามีแปลงดอกไม้ แทนด้วยอาร์เรย์ที่มี 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