สมมติว่าเรามีอาร์เรย์ nums ประกอบด้วย 0 และ 1 และจำนวนเต็ม k ตรวจสอบว่า 1 ทุกตัวห่างกันอย่างน้อย k ช่องหรือไม่
ตัวอย่าง: nums = [1,0,0,0,1,0,0,1], k = 2 ผลลัพธ์ = true
วิธีแก้ปัญหา
- เก็บตำแหน่ง 1 ล่าสุด (last = -1)
- วนลูปผ่าน nums:
- ถ้าเจอ 1: ตรวจสอบ i - last - 1 ≥ k
- ถ้าไม่ผ่าน คืน false
- อัปเดต last = i
- จบลูปคืน true
ตัวอย่างโค้ด C++
#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;
}
};
int 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