检查数组中大小为k的每个段中是否存在密钥

给定一个数组arr[],数组的大小为n,另一个键为x,并给出一个段大小k。任务是在arr[]中的每个大小为k的段中找到键x。 例如:

null

输入: arr[]={3,5,2,4,9,3,1,7,3,11,12,3} x=3 k=3 输出: 对 数组中有4个大小为k的不重叠段,{3,5,2},{4,9,3},{1,7,3}和{11,12,3}。3.所有环节都有。 输入: arr[]={21,23,56,65,34,54,76,32,23,45,21,23,25} x=23 k=5 输出: 对 有三段,最后一段不是完整的{21,23,56,65,34},{54,76,32,23,45}和{21,23,25}。 23号在所有窗口。 输入: arr[]={5,8,7,12,14,3,9} x=8 k=2 输出:

这个想法很简单,我们考虑每一个大小的k段,检查是否存在于窗口中。我们需要小心处理最后一部分。 以下是上述方法的实施情况:

C++

// C++ code to find the  every segment size of
// array have a search key x
#include <bits/stdc++.h>
using namespace std;
bool findxinkwindowSize( 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<n; j++)
if (arr[j] == x)
break ;
if (j == n)
return false ;
return true ;
}
// main driver
int main()
{
int arr[] = { 3, 5, 2, 4, 9, 3, 1, 7, 3, 11, 12, 3 };
int x = 3, k = 3;
int n = sizeof (arr) / sizeof (arr[0]);
if (findxinkwindowSize(arr, x, k, n))
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}


JAVA

// Java code to find the every
// segment size of array have
// a search key x
import java.util.*;
class GFG {
static boolean findxinkwindowSize( 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 (findxinkwindowSize(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 findxinkwindowSize(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 (findxinkwindowSize(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 findxinkwindowSize( 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 (findxinkwindowSize(arr, x, k, n))
Console.Write( "Yes" );
else
Console.Write( "No" );
}
}
// This code is contributed by ChitraNayal


PHP

<?php
// PHP code to find the every
// segment size of array have
// a search key x
function findxinkwindowSize(& $arr , $x ,
$k , $n )
{
for ( $i = 0;
$i < $n ; $i = $i + $k )
{
// Search x in segment
// starting from index i.
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.
for ( $j = $i - $k ; $j < $n ; $j ++)
if ( $arr [ $j ] == $x )
break ;
if ( $j == $n )
return false;
return true;
}
// Driver Code
$arr = array (3, 5, 2, 4, 9, 3, 1,
7, 3, 11, 12, 3);
$x = 3;
$k = 3;
$n = sizeof( $arr );
if (findxinkwindowSize( $arr , $x , $k , $n ))
echo "Yes" ;
else
echo "No" ;
// This code is contributed
// by Shivi_Aggarwal
?>


Javascript

<script>
// JavaScript code to find the  every segment size of
// array have a search key x
function findxinkwindowSize( arr,  x,  k,  n)
{
let i;
for (i = 0; i < n; i = i + k) {
// Search x in segment starting
// from index i.
let 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.
let j;
for (j=i-k; j<n; j++)
if (arr[j] == x)
break ;
if (j == n)
return false ;
return true ;
}
// main driver
let arr = [ 3, 5, 2, 4, 9, 3, 1, 7, 3, 11, 12, 3 ];
let x = 3, k = 3;
let n = arr.length;
if (findxinkwindowSize(arr, x, k, n))
document.write( "Yes" );
else
document.write( "No" );
// This code contributed by aashish1995
</script>


输出:

Yes

时间复杂度:O(n)

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享