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

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


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