Get index of list C#

Find a Fixed Point [Value equal to index] in a given array

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

Recommended: Please solve it on PRACTICE first, before moving on to the solution.

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++ program to check fixed point
// in an array using linear search
#include
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
Javascript
// 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]];

Output:



Fixed Point is 3

Time Complexity: O[n]
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++ program to check fixed point
// in an array using binary search
#include
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[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 = low] {
int mid = low + [high - low] / 2;
if [mid == arr[mid]]
return mid;
int res = -1;
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
# Python program to check fixed point
# in an array using binary search
def binarySearch[arr, low, high]:
if high >= low :
mid = low + [high - low]/2
if mid == arr[mid]:
return mid
res = -1
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#
// C# program to check fixed point
// in an array using binary search
using 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[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
Javascript
// 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[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]];

Output:

Fixed Point is 3

Algorithmic Paradigm: Divide & Conquer
Time Complexity: O[Logn]

Find a Fixed Point [Value equal to index] in a given array | Duplicates Allowed
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.




Article Tags :
Arrays
Divide and Conquer
Searching
Amazon
FactSet
Hike
Practice Tags :
Amazon
FactSet
Hike
Arrays
Searching
Divide and Conquer
Read Full Article

Video liên quan

Chủ Đề