Search an element in an array where difference between adjacent elements is 1

3

Given an array where difference between adjacent elements is 1, write an algorithm to search for an element in the array and return the position of the element (return the first occurrence).

Examples:

Let element to be searched be x

Input: arr[] = {8, 7, 6, 7, 6, 5, 4, 3, 2, 3, 4, 3} 	
       x = 3
Output: Element 3 found at index 7

Input: arr[] =  {1, 2, 3, 4, 5, 4}
       x = 5
Output: Element 5 found at index 4

We strongly recommend you to minimize your browser and try this yourself first.

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 1. 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’ away, so instead of searching one by one, we jump ‘diff’. Thanks to RajnishKrJha for suggesting this solution here.

Below is C++ implementation of above idea.

// C++ program to search an element in an array where
// difference between all elements is 1
#include<bits/stdc++.h>
using namespace std;

// x is the elmenet to be searched in arr[0..n-1]
int search(int arr[], int n, int x)
{
    // 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
        i = i + abs(arr[i]-x);
    }

    cout << "number is not present!";
    return -1;
}

// Driver program to test above function
int main()
{
    int arr[] = {8 ,7, 6, 7, 6, 5, 4, 3, 2, 3, 4, 3 };
    int n = sizeof(arr)/sizeof(arr[0]);
    int x = 3;
    cout << "Element " << x  << " is present at index "
         << search(arr,n,3);
    return 0;
}

Output:

Element 3 is present at index 7

This article is contributed by Rishabh. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.

Recommended Posts:



3 Average Difficulty : 3/5.0
Based on 20 vote(s)










Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.