旋转数组的二分查找 代码重构 追求优雅的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | 今天面试一个小伙问旋转数组的二分搜索,https: / / leetcode.cn / problems / search - in - rotated - sorted - array 我自己先写了一份代码如下,是不是觉得很丑陋,重复代码较多? class Solution: def search( self , nums: List [ int ], target: int ) - > int : n = len (nums) def search_highest(): l, r = 0 , n - 1 while l + 1 < r: mid = (l + r) / / 2 if nums[mid] > nums[ 0 ]: l = mid else : r = mid if nums[l] > nums[r]: return l return r def bin_search(l, r): if l > r: return - 1 while l + 1 < r: mid = (l + r) / / 2 if nums[mid] < target: l = mid else : r = mid if nums[l] = = target: return l if nums[r] = = target: return r return - 1 index = search_highest() i = bin_search( 0 , index) return i if i > = 0 else bin_search(index + 1 , n - 1 ) 重构后的代码如下,看起来优雅多了,核心是 lambda 函数的巧妙应用! class Solution: def search( self , nums: List [ int ], target: int ) - > int : n = len (nums) cmp_func = lambda mid: nums[mid] > nums[ 0 ] cmp_func2 = lambda mid: nums[mid] < target ret_func = lambda l, r: l if nums[l] > nums[r] else r ret_func2 = lambda l, r: l if nums[l] = = target else (r if nums[r] = = target else - 1 ) def bin_search(l, r, cmp , ret): if l > r: return - 1 while l + 1 < r: mid = (l + r) / / 2 if cmp (mid): l = mid else : r = mid return ret(l, r) index = bin_search( 0 , n - 1 , cmp_func, ret_func) i = bin_search( 0 , index, cmp_func2, ret_func2) return i if i > = 0 else bin_search(index + 1 , n - 1 , cmp_func2, ret_func2) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2022-02-27 远控免杀技术-Veil免杀——AES、DES、Base64等各种混淆技术,安装的时候很大因为是交叉编译,此外,最新版叫veil了而不是veil-evasion
2021-02-27 机器学习中的丑小鸭定理——世界上不存 在相似性的客观标准,是不是意味着如果从基因上去识别差异就没有差异,而人类只能做到主观的模糊论断???孪生网络无解???
2021-02-27 回头看PAC 学习理论——样本数+模型复杂度(参数个数) 在多项式时间内完成训练 感觉小样本学习是伪需求???
2021-02-27 图卷积神经网络——咋感觉就是做词嵌入 然后给出分类结果呢 类似deepwalk+分类
2021-02-27 苏宁基于服务层知识图谱的真假告警判定——本质上就是数据标注后 看上报事件和标注的误报、非误报事件相似度来消噪
2018-02-27 leetcode 657. Judge Route Circle
2018-02-27 leetcode 461. Hamming Distance