檢查一個鍵是否存在於 C++ 陣列的每個大小為 k 的片段中
概念
針對給定的陣列 arr1[](其大小為 N)、另一個鍵 X 和一個片段大小 K,這項任務是確定鍵 X 是否存在於 arr1[] 的每個大小為 K 的片段中。
輸入
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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP