📜  门| GATE-CS-2017(套装2)|问题 29(1)

📅  最后修改于: 2023-12-03 15:28:45.750000             🧑  作者: Mango

题目29

给定一个长度为n的数组arr和一个数字x,找到最小的下标i,使得arr[i]的值等于x。下标i满足0 <= i < n。

请注意,如果x在arr中不出现,则返回-1。

实现函数int findElement(int arr[], int n, int x)。

输入
  • 一个长度为n的数组arr,其中0 <= n <= 10^6。
  • 一个数字x,其中0 <= x <= 10^4。
输出

返回最小的下标i,使得arr[i]的值等于x。如果x在arr中不出现,则返回-1。

示例

输入示例1

arr = [1, 2, 3, 4, 5, 6]
x = 3

输出示例1

2

输入示例2

arr = [1, 2, 3, 4, 5, 6]
x = 7

输出示例2

-1
解法

此题可以用二分查找的方式来解决。先将数组排序,然后再进行二分查找,找到第一个等于x的元素下标即可。

时间复杂度为O(logn)。

代码如下:

int findElement(int arr[], int n, int x){
    int left = 0, right = n - 1;
    while (left <= right) {
        int mid = (left + right) / 2;
        if (arr[mid] == x) {
            return mid;
        } else if (arr[mid] > x) {
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    return -1;
}