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

ตรวจสอบว่ามีคีย์อยู่ในทุกส่วนของขนาด k ในอาร์เรย์ใน C++ . หรือไม่


แนวคิด

สำหรับอาร์เรย์ที่กำหนด arr1[] ที่มีขนาดของอาร์เรย์ N อีกคีย์หนึ่ง X และขนาดเซ็กเมนต์ K ภารกิจคือการพิจารณาว่าคีย์ X มีอยู่ในทุกส่วนของขนาด K ใน arr1[]

ป้อนข้อมูล

arr1[] = { 4, 6, 3, 5, 10, 4, 2, 8, 4, 12, 13, 4}
X = 4
K = 3

ผลผลิต

Yes

มี 4 ส่วนที่ไม่ทับซ้อนกันของขนาด K ในอาร์เรย์ {4, 6, 3}, {5, 10, 4}, {2, 8, 4} และ {12, 13, 4} 4 มีอยู่ทุกส่วน

ป้อนข้อมูล

arr1[] = { 22, 24, 57, 66, 35, 55, 77, 33, 24, 46, 22, 24, 26}
X = 24
K = 5

ผลผลิต

Yes

ป้อนข้อมูล

arr1[] = { 6, 9, 8, 13, 15, 4, 10}
X = 9
K = 2

ผลผลิต

No

วิธีการ

ในกรณีนี้ แนวคิดเรียบง่าย เราจะพิจารณาทุกส่วนของขนาด K และตรวจสอบว่ามี X อยู่ในหน้าต่างหรือไม่ เราจึงต้องจัดการกับส่วนสุดท้ายอย่างระมัดระวัง

ตัวอย่าง

ต่อไปนี้เป็นการดำเนินการตามแนวทางข้างต้น -

// C++ code to determine the every segment size of
// array have a search key x
#include <bits/stdc++.h>
using namespace std;
bool findxinkindowSize1(int arr1[], int X, int K, int N){
   int i;
   for (i = 0; i < N; i = i + K) {
      // Search X in segment starting
      // from index i.
      int j;
      for (j = 0; j < K; j++)
         if (arr1[i + j] == X)
      break;
      // If loop didn't break
      if (j == K)
         return false;
   }
   // If N is a multiple of K
   if (i == N)
      return true;
   // Check in last segment if N
   // is not multiple of K.
   int j;
   for (j=i-K; j<N; j++)
      if (arr1[j] == X)
   break;
   if (j == N)
      return false;
   return true;
}
// main driver
int main(){
   int arr1[] = { 4, 6, 3, 5, 10, 4, 2, 8, 4, 12, 13, 4 };
   int X = 4, K = 3;
   int N = sizeof(arr1) / sizeof(arr1[0]);
   if (findxinkindowSize1(arr1, X, K, N))
      cout << "Yes" << endl;
   else
      cout << "No" << endl;
   return 0;
}

ผลลัพธ์

Yes