สมมติว่าเรามีอาร์เรย์จำนวน 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