Find a Fixed Point (Value equal to index) in a given array

11 Jun, 2022
Given an array of n distinct integers sorted in ascending order, write a function that returns a Fixed Point in the array, if there is any Fixed Point present in array, else returns -1. Fixed Point in an array is an index i such that arr[i] is equal to i. Note that integers in array can be negative. Examples:  
  Input: arr[] = {-10, -5, 0, 3, 7}
  Output: 3  // arr[3] == 3 

  Input: arr[] = {0, 2, 5, 8, 17}
  Output: 0  // arr[0] == 0 


  Input: arr[] = {-10, -5, 3, 4, 7, 9}
  Output: -1  // No Fixed Point
 
Method 1 (Linear Search) Linearly search for an index i such that arr[i] == i. Return the first such index found. Thanks to pm for suggesting this solution.  
C++
C
Java
Python3
C#
PHP
Javascript
// C++ program to check fixed point// in an array using linear search#include <bits/stdc++.h>using namespace std; int linearSearch(int arr[], int n){    int i;    for (i = 0; i < n; i++) {        if (arr[i] == i)            return i;    }     /* If no fixed point present then return -1 */    return -1;} /* Driver code */int main(){    int arr[] = { -10, -1, 0, 3, 10, 11, 30, 50, 100 };    int n = sizeof(arr) / sizeof(arr[0]);    cout << "Fixed Point is " << linearSearch(arr, n);    return 0;} // This is code is contributed by rathbhupendra
// C program to check fixed point// in an array using linear search#include <stdio.h> int linearSearch(int arr[], int n){    int i;    for (i = 0; i < n; i++) {        if (arr[i] == i)            return i;    }     /* If no fixed point present then return -1 */    return -1;} /* Driver program to check above functions */int main(){    int arr[] = { -10, -1, 0, 3, 10, 11, 30, 50, 100 };    int n = sizeof(arr) / sizeof(arr[0]);    printf("Fixed Point is %d", linearSearch(arr, n));    getchar();    return 0;}
// Java program to check fixed point// in an array using linear search class Main {    static int linearSearch(int arr[], int n)    {        int i;        for (i = 0; i < n; i++) {            if (arr[i] == i)                return i;        }         /* If no fixed point present           then return -1 */        return -1;    }    // main function    public static void main(String args[])    {        int arr[] = { -10, -1, 0, 3, 10, 11, 30, 50, 100 };        int n = arr.length;        System.out.println("Fixed Point is "                           + linearSearch(arr, n));    }}
# Python program to check fixed point# in an array using linear searchdef linearSearch(arr, n):    for i in range(n):        if arr[i] is i:            return i    # If no fixed point present then return -1    return -1 # Driver program to check above functionsarr = [-10, -1, 0, 3, 10, 11, 30, 50, 100]n = len(arr)print("Fixed Point is " + str(linearSearch(arr, n))) # This code is contributed by Pratik Chhajer
// C# program to check fixed point// in an array using linear searchusing System; class GFG {    static int linearSearch(int[] arr, int n)    {        int i;        for (i = 0; i < n; i++) {            if (arr[i] == i)                return i;        }         /* If no fixed point present        then return -1 */        return -1;    }    // Driver code    public static void Main()    {        int[] arr = { -10, -1, 0, 3, 10, 11, 30, 50, 100 };        int n = arr.Length;        Console.Write("Fixed Point is " + linearSearch(arr, n));    }} // This code is contributed by Sam007
<?php// PHP program to check fixed point// in an array using linear search function linearSearch($arr, $n){    for($i = 0; $i < $n; $i++)    {        if($arr[$i] == $i)            return $i;    }     // If no fixed point present then    // return -1    return -1;}     // Driver Code    $arr = array(-10, -1, 0, 3, 10,                  11, 30, 50, 100);    $n = count($arr);    echo "Fixed Point is ".            linearSearch($arr, $n); // This code is contributed by Sam007?>
<script> // JavaScript program to check fixed point// in an array using linear search     function linearSearch(arr, n)    {        let i;        for(i = 0; i < n; i++)        {            if(arr[i] == i)                return i;        }             /* If no fixed point present        then return -1 */        return -1;    } // Driver Code    let arr = [-10, -1, 0, 3, 10, 11, 30, 50, 100];    let n = arr.length;    document.write("Fixed Point is "                + linearSearch(arr, n)); </script>
Output:  
Fixed Point is 3
Time Complexity: O(n) Auxiliary Space: O(1) 
Method 2 (Binary Search) First check whether middle element is Fixed Point or not. If it is, then return it; otherwise if the index of middle + 1 element is less than or equal to the value at the high index, then Fixed Point(s) might lie on the right side of the middle point (obviously only if there is a Fixed Point). Similarly, check if the index of middle – 1 element is greater than or equal to the value at the low index, then Fixed Point(s) might lie on the left side of the middle point.  
C++
C
Java
Python3
C#
PHP
Javascript
// C++ program to check fixed point// in an array using binary search#include <bits/stdc++.h>using namespace std; int binarySearch(int arr[], int low, int high){    if (high >= low) {        int mid = low + (high - low) / 2;        if (mid == arr[mid])            return mid;        int res = -1;        if (mid + 1 <= arr[high])            res = binarySearch(arr, (mid + 1), high);        if (res != -1)            return res;        if (mid - 1 >= arr[low])            return binarySearch(arr, low, (mid - 1));    }     /* Return -1 if there is no Fixed Point */    return -1;} /* Driver code */int main(){    int arr[10] = { -10, -1, 0, 3, 10, 11, 30, 50, 100 };    int n = sizeof(arr) / sizeof(arr[0]);    cout << "Fixed Point is " << binarySearch(arr, 0, n - 1);    return 0;}// This code is contributed by Ashutosh Singh
// C program to check fixed point// in an array using binary search#include <stdio.h> int binarySearch(int arr[], int low, int high){    if (high >= low) {        int mid = low + (high - low) / 2;        if (mid == arr[mid])            return mid;        int res = -1;        if (mid + 1 <= arr[high])            res = binarySearch(arr, (mid + 1), high);        if (res != -1)            return res;        if (mid - 1 >= arr[low])            return binarySearch(arr, low, (mid - 1));    }     /* Return -1 if there is no Fixed Point */    return -1;} /* Driver program to check above functions */int main(){    int arr[10] = { -10, -1, 0, 3, 10, 11, 30, 50, 100 };    int n = sizeof(arr) / sizeof(arr[0]);    printf("Fixed Point is %d", binarySearch(arr, 0, n - 1));    getchar();    return 0;}
// Java program to check fixed point// in an array using binary search class Main {     static int binarySearch(int arr[], int low, int high)    {        if (high >= low) {            int mid = low + (high - low) / 2;            if (mid == arr[mid])                return mid;            int res = -1;            if (mid + 1 <= arr[high])                res = binarySearch(arr, (mid + 1), high);            if (res != -1)                return res;            if (mid - 1 >= arr[low])                return binarySearch(arr, low, (mid - 1));        }         /* Return -1 if there is no Fixed Point */        return -1;    }     // main function    public static void main(String args[])    {        int arr[] = { -10, -1, 0, 3, 10, 11, 30, 50, 100 };        int n = arr.length;        System.out.println("Fixed Point is "                           + binarySearch(arr, 0, n - 1));    }}
# Python program to check fixed point# in an array using binary searchdef binarySearch(arr, low, high):    if high >= low :                 mid = low + (high - low)//2        if mid == arr[mid]:            return mid        res = -1        if mid + 1 <= arr[high]:            res = binarySearch(arr, (mid + 1), high)        if res !=-1:            return res        if mid-1 >= arr[low]:            return binarySearch(arr, low, (mid -1))          # Return -1 if there is no Fixed Point    return -1    # Driver program to check above functions */arr = [-10, -1, 0, 3, 10, 11, 30, 50, 100]n = len(arr)print("Fixed Point is " + str(binarySearch(arr, 0, n-1)))
// C# program to check fixed point// in an array using binary searchusing System; class GFG {     static int binarySearch(int[] arr, int low, int high)    {        if (high >= low) {            int mid = low + (high - low) / 2;            if (mid == arr[mid])                return mid;            int res = -1;            if (mid + 1 <= arr[high])                res = binarySearch(arr, (mid + 1), high);            if (res != -1)                return res;            if (mid - 1 >= arr[low])                return binarySearch(arr, low, (mid - 1));        }         /* Return -1 if there is no Fixed Point */        return -1;    }     // Driver code    public static void Main()    {        int[] arr = { -10, -1, 0, 3, 10, 11, 30, 50, 100 };        int n = arr.Length;        Console.Write("Fixed Point is " + binarySearch(arr, 0, n - 1));    }}
<?php// PHP program to check fixed point// in an array using binary search  function binarySearch($arr, $low, $high){    if($high >= $low)     {       $mid = (int)($low + ($high - $low)/2);       if($mid == $arr[$mid])      return $mid;       $res = -1;       if($mid+1 <= $arr[$high])      $res = binarySearch($arr, ($mid + 1), $high);       if($res!=-1)          return $res;       if($mid-1 >= $arr[$low])      return binarySearch($arr, $low, ($mid -1));     }      /* Return -1 if there is no Fixed Point */     return -1;}       // Driver Code    $arr = array(-10, -1, 0, 3, 10,                  11, 30, 50, 100);    $n = count($arr);    echo "Fixed Point is: "        . binarySearch($arr, 0, $n - 1);         ?>
<script> // javascript program to check fixed point// in an array using binary search    function binarySearch(arr,low,high){    if(high >= low)     {       let mid = math.floor(low + (high - low)/2);       if(mid == arr[mid])      return mid;       let res = -1;       if(mid+1 <= arr[high])      res = binarySearch(arr, (mid + 1), high);       if(res!=-1)          return res;       if(mid-1 >= arr[low])      return binarySearch(arr, low, (mid -1));     }      /* Return -1 if there is no Fixed Point */     return -1;}       // Driver program    let arr = [-10, -1, 0, 3, 10, 11, 30, 50, 100];    let n = arr.length;    document.write("Fixed Point is "+ binarySearch(arr, 0, n-1));     </script>
Output:  
Fixed Point is 3
Algorithmic Paradigm: Divide & Conquer 
Time Complexity: O(Logn)
Auxiliary Space: O(log n) (As implicit stack is used for recursive calls) 
Find a Fixed Point in a given array | GeeksforGeeks - YouTubeGeeksforGeeks529K subscribersFind a Fixed Point in a given array | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 8:46•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=hASRzBXY5kY" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
Find a Fixed Point (Value equal to index) in a given array | Duplicates AllowedPlease write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
Sam007
vt_m
rathbhupendra
code_hunt
jana_sayantan
rohitsingh07052
amartyaghoshgfg
simmytarika5
codewithrathi
Amazon
FactSet
Hike
Arrays
Divide and Conquer
Searching
Amazon
FactSet
Hike
Arrays
Searching
Divide and Conquer
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Multidimensional Arrays in Java
Stack Data Structure (Introduction and Program)
Linear Search
Merge Sort
QuickSort
Binary Search
Maximum and minimum of an array using minimum number of comparisons
Count Inversions in an array | Set 1 (Using Merge Sort)