今天发布了几乎30000字的web前端博客,大家可以去看一看
目录
力扣题号:35. 搜索插入位置 - 力扣(LeetCode)
进入流程
吾日三省吾身
比那个男人帅吗?
比那个男人爱她吗?
比那个男人有实力吗?
力扣题号:35. 搜索插入位置 - 力扣(LeetCode)
下述题目描述和示例均来自力扣
题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为
O(log n)
的算法。
示例
示例 1:
输入: nums = [1,3,5,6], target = 5 输出: 2示例 2:
输入: nums = [1,3,5,6], target = 2 输出: 1示例 3:
输入: nums = [1,3,5,6], target = 7 输出: 4
ok,了解了这道题就可以开始思考了。
思路
其实读一下题目,他下面有一行很醒目的话。就是请设计一个logn的算法。你回想一下你的脑海,什么算法是logn级别的呢?
没错,适合这道题的就是二分查找了
那其实这道题已经不难了。
Java解法:二分查找
class Solution {
public int searchInsert(int[] nums, int target) {
//其实在这里看见是一个logn级别的算法那么就已经说明了
//这道题需要使用二分查找了
int left = 0;
int right = nums.length - 1;
//在这里采用左闭右闭的原则
int middle = 0;
//因为是左闭右闭,所以left == right 在数学上是合理的
while(left <= right){
middle = left + (right - left) / 2;
if(nums[middle] > target){
//因为是左闭右闭,所以middle已经判断了
//所以就没有必要再判断一次了
right = middle - 1;
}else if(nums[middle] < target){
//同上
left = middle + 1;
}
//遇到目标值,返回
if(nums[middle] == target){
return middle;
}
}
//因为要返回的是插入位置,所以返回的是left,middle不行,right也不行
return left;
}
}
喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔!!!!~
打败了全世界的人~~!!!!!
结语
这里我对二分说的比较浅,主要还是在做题思路,其实这道题相比于简单只是用二分的题目,仅仅是多了一个要返回应该插入的下标罢了,而这个应该插入的下标就是 left大家可以好好的体会一下。
如果对二分不是很熟悉,可以看一下的我另一篇文章第一章数组_二分查找_WenGyyyL的博客-CSDN博客
这里面对二分查找说的比较熟悉
我的意思是:如果你看不懂他,就回来看看我