[Swift]二分法的两种方式
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ )
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10403410.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
扩展数组:
1 extension Array 2 { 3 //二分法方式1 4 func binarySearch(_ nums:[Int],_ target: Int) -> Int 5 { 6 var low = 0 7 var high = nums.count - 1 8 var mid = (low + high) >> 1 9 10 while low <= high { 11 let val = nums[mid] 12 if target == val { 13 return mid 14 } else if target < val { 15 high = mid - 1 16 } else { 17 low = mid + 1 18 } 19 mid = (low + high) >> 1 20 } 21 return high 22 } 23 24 //二分法方式2 25 func binarySearch(_ nums:[Int],_ start: Int, _ end: Int,_ target: Int) -> Int 26 { 27 let mid = start + (end - start) / 2 28 if nums[mid] >= target && (start == mid || nums[mid - 1] < target) 29 { 30 return mid 31 } 32 if nums[mid] < target 33 { 34 return binarySearch(nums,target, mid + 1, end) 35 } 36 return binarySearch(nums,target, start, mid - 1) 37 } 38 }
测试代码:
1 //注:不含有元素5 2 var arr = [1,2,3,4,6,7,8,9] 3 print(arr.binarySearch(arr,5)) 4 //Print 3 5 print(arr.binarySearch(arr,0,arr.count,5)) 6 //Print 4 7 8 //注:含有元素6 9 print(arr.binarySearch(arr,6)) 10 //Print 4 11 print(arr.binarySearch(arr,0,arr.count,6)) 12 //Print 4
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)