leetcode算法入门 二分查找
1. Binary Search
一个升序的整型数组,数组中的数字不重复。写一个函数,要求输入目标数字,返回这个
目标数字在数组里的下标,不存在则返回-1
要求时间复杂度为O(log n)
Solution By C:
1 int search(int* nums, int numsSize, int target){ 2 3 int left = 0; 4 int right = numsSize-1; 5 int mid = 0; 6 while(left<=right) { 7 mid = (right-left)>>1 + left; 8 if(nums[mid] > target) { 9 right = middle-1; 10 } 11 else if(nums[mid] < target) { 12 left = mid+1; 13 } 14 else if(nums[mid] == target){ 15 return mid; 16 } 17 } 18 19 return -1; 20 }
2. First Bad Version
数组[1,2,3,4...,n]中存储的是n个版本的版本号,现提供一个函数 isBadVersion,输入版本号,返回
True或False表示版本的好坏。如果某版本是坏的,那他后面的版本也必然是坏的。现在要求写一个函数,
实现最少次调用isBadVersion,返回最初坏掉的那个版本号。
Solution By C:
1 // The API isBadVersion is defined for you. 2 // bool isBadVersion(int version); 3 4 int firstBadVersion(int n) { 5 int left = 1, right = n; 6 while (left < right) { // 循环直至区间左右端点相同 7 int mid = left + (right - left) >> 1; // 防止计算时溢出 8 if (isBadVersion(mid)) { 9 right = mid; // 答案在区间 [left, mid] 中 10 } else { 11 left = mid + 1; // 答案在区间 [mid+1, right] 中 12 } 13 } 14 // 此时有 left == right,区间缩为一个点,即为答案 15 return left; 16 17 }
3. Search Insert Position
一个不包含相同值的升序数组,给定一个目标值,返回目标值在数组中的索引。
如果不存在,返回它将要被插入的位置。
1 int searchInsert(int* nums, int numsSize, int target) { 2 int left = 0, right = numsSize - 1; 3 while (left <= right) { 4 int mid = ((right - left) >> 1) + left; 5 if (target <= nums[mid]) 6 right = mid -1; 7 else 8 left = mid + 1; 9 } 10 return left; 11 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?