给定一个由n个不同的整数组成的数组,这些数组按升序排序,如果数组中存在任何固定点,则编写一个返回固定点的函数,否则返回-1。数组中的不动点是索引i,因此arr [i]等于i。请注意,数组中的整数可以为负数。
例子:
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
方法1(线性搜索)
线性搜索索引i,以使arr [i] == i。返回找到的第一个这样的索引。感谢pm建议这种解决方案。
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 << "Fixed Point is " << linearSearch(arr, n);
return 0;
}
// This is code is contributed by rathbhupendra
C
// C program to check fixed point
// in an array using linear search
#include
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
// 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
# Python program to check fixed point
# in an array using linear search
def 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 functions
arr = [-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#
// C# program to check fixed point
// in an array using linear search
using 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
Javascript
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)/2; /*low + (high - low)/2;*/
if(mid == arr[mid])
return mid;
if(mid > arr[mid])
return binarySearch(arr, (mid + 1), high);
else
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 rathbhupendra
C
// C program to check fixed point
// in an array using binary search
#include
int binarySearch(int arr[], int low, int high)
{
if(high >= low)
{
int mid = (low + high)/2; /*low + (high - low)/2;*/
if(mid == arr[mid])
return mid;
if(mid > arr[mid])
return binarySearch(arr, (mid + 1), high);
else
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
// 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)
{
/* low + (high - low)/2; */
int mid = (low + high)/2;
if(mid == arr[mid])
return mid;
if(mid > arr[mid])
return binarySearch(arr, (mid + 1), high);
else
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)//2
if mid is arr[mid]:
return mid
if mid > arr[mid]:
return binarySearch(arr, (mid + 1), high)
else:
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)))
# This code is contributed by Pratik Chhajer
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)
{
// low + (high - low)/2;
int mid = (low + high)/2;
if(mid == arr[mid])
return mid;
if(mid > arr[mid])
return binarySearch(arr, (mid + 1), high);
else
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));
}
}
// This code is contributed by Sam007
PHP
= $low)
{
/*low + (high - low)/2;*/
$mid = (int)(($low + $high) / 2);
if($mid == $arr[$mid])
return $mid;
if($mid > $arr[$mid])
return binarySearch($arr, ($mid + 1), $high);
else
return binarySearch($arr, $low, ($mid - 1));
}
/* Return -1 if there is
no Fixed Po*/
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);
// This code is contributed by Anuj_67
?>
Javascript
输出:
Fixed Point is 3
时间复杂度:O(n)
方法2(二元搜索)
首先检查中间元素是否为定点。如果是,则返回它;否则,返回它。否则检查中间元素的索引是否大于索引处的值。如果index更大,则不动点位于中间点的右侧(仅在存在不动点的情况下才明显)。其他不动点位于左侧。
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)/2; /*low + (high - low)/2;*/
if(mid == arr[mid])
return mid;
if(mid > arr[mid])
return binarySearch(arr, (mid + 1), high);
else
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 rathbhupendra
C
// C program to check fixed point
// in an array using binary search
#include
int binarySearch(int arr[], int low, int high)
{
if(high >= low)
{
int mid = (low + high)/2; /*low + (high - low)/2;*/
if(mid == arr[mid])
return mid;
if(mid > arr[mid])
return binarySearch(arr, (mid + 1), high);
else
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
// 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)
{
/* low + (high - low)/2; */
int mid = (low + high)/2;
if(mid == arr[mid])
return mid;
if(mid > arr[mid])
return binarySearch(arr, (mid + 1), high);
else
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)//2
if mid is arr[mid]:
return mid
if mid > arr[mid]:
return binarySearch(arr, (mid + 1), high)
else:
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)))
# This code is contributed by Pratik Chhajer
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)
{
// low + (high - low)/2;
int mid = (low + high)/2;
if(mid == arr[mid])
return mid;
if(mid > arr[mid])
return binarySearch(arr, (mid + 1), high);
else
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));
}
}
// This code is contributed by Sam007
的PHP
= $low)
{
/*low + (high - low)/2;*/
$mid = (int)(($low + $high) / 2);
if($mid == $arr[$mid])
return $mid;
if($mid > $arr[$mid])
return binarySearch($arr, ($mid + 1), $high);
else
return binarySearch($arr, $low, ($mid - 1));
}
/* Return -1 if there is
no Fixed Po*/
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);
// This code is contributed by Anuj_67
?>
Java脚本
输出:
Fixed Point is 3
算法范式:分而治之
时间复杂度:O(登录)