⭐欢迎订阅《leetcode》专栏,每日一题,每天进步⭐
虽然代码多,比较繁琐,但是思路很简单。自己比较菜,今天刷题自闭了,一度怀疑自己的智商。但是,独立的做出了这道题,感觉还是有一丝丝欣慰的!加油,每一个努力的人,每一个焦头烂额解不出题时却仍不放弃的自己。岂能尽如人意,但求无愧于心!
——leetcode此题热评
前言
哈喽,大家好,我是一条。
糊涂算法,难得糊涂
《糊涂算法》专栏上线倒计时——7天
Question
35. 搜索插入位置
难度:简单
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5 输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2 输出: 1
Solution
基本二分法。借鉴这个写法
int mid = ((right - left) >> 1) + left;
- 循环跳出条件:left <= right
- 左右端点的变化
- 等于mid时的处理
Code
所有
leetcode
代码已同步至github欢迎
star
/**
* @author 一条coding
*/
class Solution {
public int searchInsert(int[] nums, int target) {
int n = nums.length;
int left = 0, right = n - 1, ans = n;
while (left <= right) {
int mid = ((right - left) >> 1) + left;
if (target <= nums[mid]) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
}
}
Result
复杂度分析
- 时间复杂度:O(logN)
🌈寻宝
⭐今天是坚持刷题更文的第47/100天
⭐各位的点赞、关注、收藏、评论、订阅就是一条创作的最大动力
⭐更多算法题欢迎关注专栏《leetcode》
为了回馈各位粉丝,礼尚往来,给大家准备了一些算法教学视频和电子书
需要的小伙伴可以点这里