给定一个数组arr [],数组的大小为n,另一个为键x,并给你一个段大小k。任务是发现密钥x存在于arr []中大小为k的每个段中。
例子:
Input :
arr[] = { 3, 5, 2, 4, 9, 3, 1, 7, 3, 11, 12, 3}
x = 3
k = 3
Output : Yes
There are 4 non-overlapping segments of size k in the array, {3, 5, 2}, {4, 9, 3}, {1, 7, 3} and {11, 12, 3}. 3 is present all segments.
Input :
arr[] = { 21, 23, 56, 65, 34, 54, 76, 32, 23, 45, 21, 23, 25}
x = 23
k = 5
Output :Yes
There are three segments and last segment is not full {21, 23, 56, 65, 34}, {54, 76, 32, 23, 45} and {21, 23, 25}.
23 is present all window.
Input :arr[] = { 5, 8, 7, 12, 14, 3, 9}
x = 8
k = 2
Output : No
这个想法很简单,我们考虑大小为k的每个段,然后检查窗口中是否存在x。我们需要仔细处理最后一部分。
下面是上述方法的实现:
C++
// C++ code to find the every segment size of
// array have a search key x
#include
using namespace std;
bool findxinkindowSize(int arr[], 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 (arr[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
Java
// Java code to find the every
// segment size of array have
// a search key x
import java.util.*;
class GFG {
static boolean findxinkindowSize(int N, int[] arr,
int x, int k)
{
int i;
boolean b = false;
// Iterate from 0 to N - 1
for (i = 0; i < N; i = i + k) {
// Iterate from 0 to k - 1
for (int j = 0; j < k; j++) {
if (i + j < N && arr[i + j] == x)
break;
if (j == k)
return false;
if (i + j >= N)
return false;
}
}
if (i >= N)
return true;
else
return b;
}
// Driver Code
public static void main(String args[])
{
int arr[] = new int[] { 3, 5, 2, 4, 9, 3,
1, 7, 3, 11, 12, 3 };
int x = 3, k = 3;
int n = arr.length;
if (findxinkindowSize(n, arr, x, k))
System.out.println("Yes");
else
System.out.println("No");
}
}
// This code is contributed by Vivek258709
Python 3
# Python 3 program to find
# the every segment size of
# array have a search key x
def findxinkindowSize(arr, x, k, n) :
i = 0
while i < n :
j = 0
# Search x in segment
# starting from index i
while j < k :
if arr[i + j] == x :
break
j += 1
# If loop didn't break
if j == k :
return False
i += k
# If n is a multiple of k
if i == n :
return True
j = i - k
# Check in last segment if n
# is not multiple of k.
while j < n :
if arr[j] == x :
break
j += 1
if j == n :
return False
return True
# Driver Code
if __name__ == "__main__" :
arr = [ 3, 5, 2, 4, 9, 3,
1, 7, 3, 11, 12, 3 ]
x, k = 3, 3
n = len(arr)
if (findxinkindowSize(arr, x, k, n)) :
print("Yes")
else :
print("No")
# This code is contributed
# by ANKITRAI1
C#
// C# code to find the every
// segment size of array have
// a search key x
using System;
class GFG
{
static bool findxinkindowSize(int[] arr, 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 (arr[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 l;
for (l = i - k; l < n; l++)
if (arr[l] == x)
break;
if (l == n)
return false;
return true;
}
// Driver Code
public static void Main()
{
int[] arr = new int[] {3, 5, 2, 4, 9, 3,
1, 7, 3, 11, 12, 3};
int x = 3, k = 3;
int n = arr.Length;
if (findxinkindowSize(arr, x, k, n))
Console.Write("Yes");
else
Console.Write("No");
}
}
// This code is contributed by ChitraNayal
PHP
Javascript
Yes
时间复杂度:O(n)