二分查找
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 | 数组:【 1 , 2 , 2 , 2 , 3 , 4 , 5 , 6 】 二分查找市返回 2 的位置, 左侧边界和右侧边界的写法: int binary_search( int [] nums, int target) { int left = 0 , right = nums.length - 1 ; while (left < = right) { int mid = left + (right - left) / 2 ; if (nums[mid] < target) { left = mid + 1 ; } else if (nums[mid] > target) { right = mid - 1 ; } else if (nums[mid] = = target) { / / 直接返回 return mid; } } / / 直接返回 return - 1 ; } int left_bound( int [] nums, int target) { int left = 0 , right = nums.length - 1 ; while (left < = right) { int mid = left + (right - left) / 2 ; if (nums[mid] < target) { left = mid + 1 ; } else if (nums[mid] > target) { right = mid - 1 ; } else if (nums[mid] = = target) { / / 别返回,锁定左侧边界 right = mid - 1 ; } } / / 最后要检查 left 越界的情况 if (left > = nums.length || nums[left] ! = target) return - 1 ; return left; } int right_bound( int [] nums, int target) { int left = 0 , right = nums.length - 1 ; while (left < = right) { int mid = left + (right - left) / 2 ; if (nums[mid] < target) { left = mid + 1 ; } else if (nums[mid] > target) { right = mid - 1 ; } else if (nums[mid] = = target) { / / 别返回,锁定右侧边界 left = mid + 1 ; } } / / 最后要检查 right 越界的情况 if (right < 0 || nums[right] ! = target) return - 1 ; return right; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程