📅  最后修改于: 2023-12-03 14:50:46.313000             🧑  作者: Mango
该题目出自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
本题是一道很简单的查找问题,具有很好的训练作用。二分搜索是一种优秀的算法,经常被用来解决查找问题。在编写代码时,要注意算法的细节,以确保正确性。