📌  相关文章
📜  国际空间研究组织 | ISRO CS 2009 |问题 33(1)

📅  最后修改于: 2023-12-03 14:50:46.313000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2009 |问题 33

该题目出自ISRO CS 2009考试,要求在一个排序数组中查找元素,如果找到则返回索引值,否则返回-1.

题目描述

给定一个已排序的数组和一个元素,请在数组中查找该元素的索引。如果元素在数组中存在,则返回其索引值,否则返回-1。 假设给定的数组中没有重复值。

输入

输入的第一行包含一个整数T,表示测试用例的数量。 T测试用例的描述如下: 每个测试用例包含一行包含3个整数n、x和arr。 n表示数组中的元素数,x表示要查找的元素,而arr是已排序的数组。

输出

对于每个测试用例,请输出元素x的索引(0-based索引)。如果元素不存在,则输出-1。

示例

输入:

1
10 50 1 2 3 4 5 6 7 8 9 10

输出:

4
题解

这道题很简单,考虑用二分搜索算法。可以设置两个指针,分别指向数组的起始位置和末尾位置。然后,计算数组的中间元素位置。如果中间元素与给定元素相等,则直接返回该位置。否则,根据给定元素与中间元素的大小关系更新指针。如果找不到该元素,则返回-1。

下面是一个示例代码:

def find_element(n, x, arr):
    left, right = 0, n - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == x:
            return mid
        elif arr[mid] < x:
            left = mid + 1
        else:
            right = mid - 1
    return -1
总结

本题是一道很简单的查找问题,具有很好的训练作用。二分搜索是一种优秀的算法,经常被用来解决查找问题。在编写代码时,要注意算法的细节,以确保正确性。