二分查找笔记 xx0
练习题:
给定一个 n 个元素 有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。(题目来源:LC)
解题思路:
因为数组为整形 有序(升序)数组 ,所以当我们 nums[i] = target 时,即满足条件,输出下标 i 即可。即,根据有序数组,能有以下三种情况出现:
nums[i] = target nums[i]=target,则下标 i 即为要寻找的下标;
nums[i] > target nums[i]>target,则target 只可能在下标 i 的左侧;
nums[i] < target nums[i]<target,则target 只可能在下标 i 的右侧。
(题目来源:LC)
public static void main{ int left = 1; int right = n; while(left < right){ int mid = left + (right - left) / 2; if(isBadVersion(mid)){ right = mid; }else if{ left = mid +1; } } return left; }
练习题:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。(题目来源:LC)
public int searchInsert(int[] nums, int target) { int len = nums.length; int left = 0; int right = len; // 在区间 nums[left..right] 里查找第 1 个大于等于 target 的元素的下标 while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] < target){ // 下一轮搜索的区间是 [mid + 1..right] left = mid + 1; } else { // 下一轮搜索的区间是 [left..mid] right = mid; } } return left; } }
# 注意时间复杂度必须为O(log n)
本文来自博客园,作者:愿你一生干净纯洁,转载请注明原文链接:https://www.cnblogs.com/egalehawk/articles/15522630.html

浙公网安备 33010602011771号