# Searching in an array where adjacent differ by at most k

A step array is an array of integer where each element has a difference of atmost k with its neighbor. Given a key x, we need to find the index value of k if multiple element exist return the first occurrence of key.

Examples:

```Input : arr[] = {4, 5, 6, 7, 6}
k = 1
x = 6
Output : 2
The first index of 6 is 2.

Input : arr[] = {20, 40, 50, 70, 70, 60}
k = 20
x = 60
Output : 5
The index of 60 is 5
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

This problem is mainly an extension of Search an element in an array where difference between adjacent elements is 1.

A Simple Approach is to traverse the given array one by one and compare every element with given element ‘x’. If matches, then return index.

The above solution can be Optimized using the fact that difference between all adjacent elements is at most k. The idea is to start comparing from the leftmost element and find the difference between current array element and x. Let this difference be ‘diff’. From the given property of array, we always know that x must be at-least ‘diff/k’ away, so instead of searching one by one, we jump ‘diff/k’.

Below is the implementation of above idea.

## C++

 `// C++ program to search an element in an array  ` `// where difference between all elements is 1 ` `#include ` `using` `namespace` `std; ` ` `  `// x is the element to be searched in arr[0..n-1] ` `// such that all elements differ by at-most k. ` `int` `search(``int` `arr[], ``int` `n, ``int` `x, ``int` `k) ` `{ ` `    ``// Travers the given array starting from ` `    ``// leftmost element ` `    ``int` `i = 0; ` `    ``while` `(i < n) ` `    ``{ ` `        ``// If x is found at index i ` `        ``if` `(arr[i] == x) ` `            ``return` `i; ` ` `  `        ``// Jump the difference between current ` `        ``// array element and x divided by k ` `        ``// We use max here to make sure that i ` `        ``// moves at-least one step ahead. ` `        ``i = i + max(1, ``abs``(arr[i]-x)/k); ` `    ``} ` ` `  `    ``cout << ``"number is not present!"``; ` `    ``return` `-1; ` `} ` ` `  `// Driver program to test above function ` `int` `main() ` `{ ` `    ``int` `arr[] = {2, 4, 5, 7, 7, 6}; ` `    ``int` `x = 6; ` `    ``int` `k = 2; ` `    ``int` `n = ``sizeof``(arr)/``sizeof``(arr); ` `    ``cout << ``"Element "` `<< x  << ``" is present at index "` `         ``<< search(arr, n, x, k); ` `    ``return` `0; ` `} `

/div>

## Java

 `// Java program to search an element in  ` `// an array where difference between all ` `// elements is 1 ` ` `  `import` `java.io.*; ` ` `  `class` `GFG { ` `     `  `    ``// x is the element to be searched  ` `    ``// in arr[0..n-1] such that all  ` `    ``// elements differ by at-most k. ` `    ``static` `int` `search(``int` `arr[], ``int` `n,  ` `                            ``int` `x, ``int` `k) ` `    ``{ ` `         `  `        ``// Travers the given array starting ` `        ``// from leftmost element ` `        ``int` `i = ``0``; ` `         `  `        ``while` `(i < n) { ` `             `  `            ``// If x is found at index i ` `            ``if` `(arr[i] == x) ` `                ``return` `i; ` ` `  `            ``// Jump the difference between  ` `            ``// current array element and x ` `            ``// divided by k We use max here ` `            ``// to make sure that i moves  ` `            ``// at-least one step ahead. ` `            ``i = i + Math.max(``1``, Math.abs(arr[i]  ` `                                      ``- x) / k); ` `        ``} ` ` `  `        ``System.out.println(``"number is "` `+  ` `                                ``"not present!"``); ` `        ``return` `-``1``; ` `    ``} ` ` `  `    ``// Driver program to test above function ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `         `  `        ``int` `arr[] = { ``2``, ``4``, ``5``, ``7``, ``7``, ``6` `}; ` `        ``int` `x = ``6``; ` `        ``int` `k = ``2``; ` `        ``int` `n = arr.length; ` `         `  `        ``System.out.println(``"Element "` `+ x + ` `                        ``" is present at index "` `                        ``+ search(arr, n, x, k)); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m `

## Python3

 `# Python 3 program to search an element in an array  ` `# where difference between all elements is 1 ` ` `  `# x is the element to be searched in arr[0..n-1] ` `# such that all elements differ by at-most k. ` `def` `search(arr, n, x, k): ` ` `  `    ``# Travers the given array starting from ` `    ``# leftmost element ` `    ``i ``=` `0` `    ``while` `(i < n): ` `     `  `        ``# If x is found at index i ` `        ``if` `(arr[i] ``=``=` `x): ` `            ``return` `i ` ` `  `        ``# Jump the difference between current ` `        ``# array element and x divided by k ` `        ``# We use max here to make sure that i ` `        ``# moves at-least one step ahead. ` `        ``i ``=` `i ``+` `max``(``1``, ``int``(``abs``(arr[i] ``-` `x) ``/` `k)) ` `     `  ` `  `    ``print``(``"number is not present!"``) ` `    ``return` `-``1` ` `  ` `  `# Driver program to test above function ` `arr ``=` `[``2``, ``4``, ``5``, ``7``, ``7``, ``6``] ` `x ``=` `6` `k ``=` `2` `n ``=` `len``(arr) ` `print``(``"Element"``, x, ``"is present at index"``,search(arr, n, x, k)) ` ` `  `# This code is contributed ` `# by Smitha Dinesh Semwal `

## C#

 `// C# program to search an element in  ` `// an array where difference between  ` `// all elements is 1 ` `using` `System; ` ` `  `class` `GFG { ` `     `  `    ``// x is the element to be searched  ` `    ``// in arr[0..n-1] such that all  ` `    ``// elements differ by at-most k. ` `    ``static` `int` `search(``int` `[]arr, ``int` `n,  ` `                          ``int` `x, ``int` `k) ` `    ``{ ` `         `  `        ``// Travers the given array starting ` `        ``// from leftmost element ` `        ``int` `i = 0; ` `         `  `        ``while` `(i < n)  ` `        ``{ ` `             `  `            ``// If x is found at index i ` `            ``if` `(arr[i] == x) ` `                ``return` `i; ` ` `  `            ``// Jump the difference between  ` `            ``// current array element and x ` `            ``// divided by k We use max here ` `            ``// to make sure that i moves  ` `            ``// at-least one step ahead. ` `            ``i = i + Math.Max(1, Math.Abs(arr[i]  ` `                                    ``- x) / k); ` `        ``} ` ` `  `        ``Console.Write(``"number is "` `+  ` `                      ``"not present!"``); ` `        ``return` `-1; ` `    ``} ` ` `  `    ``// Driver Code ` `    ``public` `static` `void` `Main() ` `    ``{ ` `         `  `        ``int` `[]arr = { 2, 4, 5, 7, 7, 6 }; ` `        ``int` `x = 6; ` `        ``int` `k = 2; ` `        ``int` `n = arr.Length; ` `         `  `        ``Console.Write(``"Element "` `+ x +  ` `                      ``" is present at index "` `+  ` `                        ``search(arr, n, x, k)); ` `    ``} ` `} ` ` `  `// This code is contributed by Nitin Mittal. `

## PHP

 ` `

Output:

```Element 6 is present at index 5
```

## tags:

Arrays Searching Arrays Searching