สมมติว่าเรามีอาร์เรย์จำนวน 0s และ 1s และจำนวนเต็ม k เราต้องตรวจสอบว่า 1 ทั้งหมดอยู่ห่างจากกันอย่างน้อย k หรือไม่ ให้คืนค่าเป็นเท็จ
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[1,0,0,0,1,0,0,1], k =2 ผลลัพธ์จะเป็นจริง เนื่องจาก 1 แต่ละตัวอยู่ห่างจากกันอย่างน้อย 2 ตำแหน่ง กัน.
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
สุดท้าย :=-1
-
สำหรับการเริ่มต้น i :=0 เมื่อ i <ขนาดของ nums ให้อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ -
-
ถ้า nums[i] เท่ากับ 1 แล้ว −
-
ถ้าสุดท้ายเหมือนกับ -1 หรือ (i - สุดท้าย - 1)>=k แล้ว −
-
สุดท้าย :=ฉัน
-
-
มิฉะนั้น
-
คืนค่าเท็จ
-
-
-
-
คืนความจริง
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; class Solution { public: bool kLengthApart(vector<int>& nums, int k) { int last = -1; for (int i = 0; i < nums.size(); i++) { if (nums[i] == 1) { if (last == -1 || (i - last - 1) >= k) last = i; else return false; } } return true; } }; main(){ Solution ob; vector<int> v = {1,0,0,0,1,0,0,1}; cout << (ob.kLengthApart(v, 2)); }
อินพุต
{1,0,0,0,1,0,0,1}
ผลลัพธ์
1