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