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 }
复制代码

 

posted @   方山客  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示