题目要求:
题目名称:查找整数
给定一个非降序的整数数组,数组中包含重复数字(重复数字很多) ,给定任意整数,对数组进行二分查找,返回数组正
确的位置,给出函数实现。 a. 连续相同的数字,返回最后一个匹配的位置 b. 如果数字不存在返回 -1。
输入描述:
数组长度 查找目标
数组
输入示例:
7 4
1 2 2 3 4 4 10
输出:
5
思路:递归讨论,其实这道题用一个index()就可以直接求出来,虽然题目要求二分查找。
求解代码:
class Solution:
def __init__(self) -> None:
self.i_begin = 0
def solution(self, n, tar, arr):
# TODO: 请在此编写代码
if n <= 1:
if arr[0] == tar:
return self.i_begin
else:
return -1
mid = n // 2
left = arr[:mid]
right = arr[mid:]
if arr[mid] > tar:
return self.solution(len(left), tar, left)
else:
self.i_begin += mid
return self.solution(len(right), tar, right)
if __name__ == "__main__":
arr_temp = [int(item) for item in input().strip().split()]
n = int(arr_temp[0])
tar = int(arr_temp[1])
arr = [int(item) for item in input().strip().split()]
sol = Solution()
result = sol.solution(n, tar, arr)
print(result)