二分查找整数【周赛25期题2】

题目要求:

题目名称:查找整数
给定一个非降序的整数数组,数组中包含重复数字(重复数字很多) ,给定任意整数,对数组进行二分查找,返回数组正
确的位置,给出函数实现。 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_小豫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值