对于具有数组N的给定数组arr1 [],另一个键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 //数组具有搜索键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) { //在段开头搜索X- //从索引i。 int j; for (j = 0; j < K; j++) if (arr1[i + j] == X) break; //如果循环没有中断 if (j == K) return false; } //如果N是K的倍数 if (i == N) return true; //检查最后一个段是否为N- //不是K的倍数。- int j; for (j=i-K; j<N; j++) if (arr1[j] == X) break; if (j == N) return false; return true; } //主驱动程序 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