Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตรวจสอบว่า 1 ทั้งหมดห่างกันอย่างน้อย K ช่องใน C++


สมมติว่าเรามีอาร์เรย์ nums ประกอบด้วย 0 และ 1 และจำนวนเต็ม k ตรวจสอบว่า 1 ทุกตัวห่างกันอย่างน้อย k ช่องหรือไม่

ตัวอย่าง: nums = [1,0,0,0,1,0,0,1], k = 2 ผลลัพธ์ = true

วิธีแก้ปัญหา

  1. เก็บตำแหน่ง 1 ล่าสุด (last = -1)
  2. วนลูปผ่าน nums:
    • ถ้าเจอ 1: ตรวจสอบ i - last - 1 ≥ k
    • ถ้าไม่ผ่าน คืน false
    • อัปเดต last = i
  3. จบลูปคืน 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