标签:二分 right target 第一天 int isBadVersion mid 查找 left
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 }
标签:二分,right,target,第一天,int,isBadVersion,mid,查找,left 来源: https://www.cnblogs.com/jdbc2nju/p/15835819.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。