You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在给定Python代码框架中实现二分查找?实验需求存疑

实现二分查找的Searcher类方案

你需要创建一个Searcher.py文件,实现静态方法binary_search,利用传入的comparer对象的compare方法统一处理字符串和数字的比较逻辑,无需直接操作元素的大小比较。

完整的Searcher类代码

class Searcher:
    @staticmethod
    def binary_search(sorted_list, search_key, comparer):
        left = 0
        right = len(sorted_list) - 1

        while left <= right:
            mid = (left + right) // 2
            # 通过比较器获取元素与搜索键的比较结果
            compare_result = comparer.compare(sorted_list[mid], search_key)
            
            if compare_result == 0:
                # 找到目标,返回对应索引
                return mid
            elif compare_result == -1:
                # 中间元素小于搜索键,调整左指针到右侧继续查找
                left = mid + 1
            else:
                # 中间元素大于搜索键,调整右指针到左侧继续查找
                right = mid - 1
        
        # 遍历结束未找到目标,返回-1
        return -1

补充NumComparer类实现

主文件中导入了NumComparer但未提供代码,需创建NumComparer.py文件,实现与StringComparer一致的接口:

class NumComparer:
    def compare(self, num1, num2):
        if num1 < num2:
            return -1
        elif num1 > num2:
            return 1
        else:
            return 0

实现逻辑说明

  1. 指针初始化:left指向列表起始位置,right指向列表末尾位置
  2. 循环查找:只要left不超过right,就计算中间索引mid
  3. 比较调整指针:
    • 比较结果为0:找到目标,返回当前中间索引
    • 比较结果为-1:中间元素比搜索键小,将左指针移到mid+1,在右侧子列表继续查找
    • 比较结果为1:中间元素比搜索键大,将右指针移到mid-1,在左侧子列表继续查找
  4. 未找到处理:循环结束仍未匹配到目标,返回-1

将上述三个文件(Searcher.py、NumComparer.py、StringComparer.py)和你的主文件放在同一目录下运行,即可通过所有测试用例。

内容的提问来源于stack exchange,提问作者Tristan Laquindanum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 15:00:55