零 标题:算法(leetode,附思维导图 + 全部解法)300题之(35)搜索插入位置

一 题目描述



二 解法总览(思维导图)

三 全部解法

1 方案1

1)代码:

// 方案1 “无视要求,遍历法”

// 思路:
// 1)状态初始化
// 2)核心处理:遍历 nums ,若此时 nums[i] >= target ,则 直接return i;
// 3)边界:遍历结束,没找到 nums[i] >= target ,则 return l; (即插入 nums 末尾)。
var searchInsert = function(nums, target) {
// 1)状态初始化
const l = nums.length; // 2)核心处理:遍历 nums ,若此时 nums[i] >= target ,则 直接return i;
for (let i = 0; i < l; i++) {
if (nums[i] >= target) {
return i;
}
} // 3)边界:遍历结束,没找到 nums[i] >= target ,则 return l; (即插入 nums 末尾)。
return l;
};

2 方案2

1)代码:

// 方案2 “二分法(开辟多余的空间 —— map,避免死循环)”。
// 技巧:善用利用提示 —— 1)nums 为无重复元素的升序排列数组。 2)时间复杂度为 O(log n) 的算法 —— “二分法”。 // 思路:
// 1)状态初始化
// 注:使用 map 进行“辅助性的判断、不然会陷入死循环” —— case:nums = [1,3,5,6], target = 2 。
// 2.1)边界:往 头、尾 插入
// 2.2)正常、进行二分法
var searchInsert = function(nums, target) {
// 1)状态初始化
// 注:使用 map 进行“辅助性的判断、不然会陷入死循环” —— case:nums = [1,3,5,6], target = 2 。
const l = nums.length;
let left = 0,
right = l - 1,
map = new Map(); // 2.1)边界:往 头、尾 插入
if (target <= nums[left]) {
return 0;
}
else if (target === nums[right]){
return l - 1;
}
else if (target > nums[right]){
return l;
}
// 2.2)正常、进行二分法
else {
while (left <= right) {
const tempStr = `${left}#${right}`;
if (map.has(tempStr)) {
return left + 1;
}
else {
map.set(tempStr, 1)
} let mid = parseInt((left + right) / 2);
if (nums[mid] === target) {
return mid;
}
else if (nums[mid] > target) {
right = mid;
}
else {
left = mid;
}
}
}
}

3 方案3

1)代码:

// 方案3 “二分法,不使用额外的空间 —— map”
// 技巧:若 nums[pos−1]<target≤nums[pos] ,则 pos 就是我们预期的下标。 // 思路:
// 1)状态初始化
// 2)核心处理:不断根据 nums[mid] 、 target 的大小关系,调整 left、right 值
// 3)返回结果 resIndex
var searchInsert = function(nums, target) {
// 1)状态初始化
const l = nums.length;
let left = 0,
right = l - 1,
resIndex = l; // 2)核心处理:不断根据 nums[mid] 、 target 的大小关系,调整 left、right 值
while (left <= right) {
// 注:等同于 const mid = ((right - left) >> 1) + left;
const mid = parseInt((left + right) / 2);
if (nums[mid] >= target) {
resIndex = mid;
right = mid - 1;
}
else {
left = mid + 1;
}
} // 3)返回结果 resIndex
return resIndex;
}

四 更多

1 刷题进度

1)LeetCode:307 / 2390 。

2)《剑指offer》:66 / 66 。

3)相关学习资料与笔记汇总:
https://github.com/CYBYOB/algorithm-leetcode/tree/master/资料%26笔记 。 4)注:所有题目均有 2-5种 左右的解法,后续还将不断更新题目 & 题解。
敬请期待~
也欢迎大家进群一起 学习、交流、刷题&拿高薪~

2 GitHub - LeetCode项目仓库

0)本项目地址:
https://github.com/CYBYOB/algorithm-leetcode 。
目标、愿景:
让每个人都能拥有一定的算法能力、以应对面试中(会举一反三的同学还可以将其融入自己的肌肉和血液,甚至能够赋能于公司的业务和技术)的算法。 本人每周仍在不断的更新 —— 保证每周都有新的题目、题解方案刺激着您的神经 和 刷题欲望。
欢迎对算法感兴趣的同学加入我们的社群。
QQ群: 933919972 ;
作者QQ: 1520112971 ;
作者VX: c13227839870(可拉您进群、一起学习与交流~) 。

3 作者标签

1)“BAT里1名小小的伪全栈工程师,主攻前端,偶尔写点后端”。

2)2019年的微信小程序应用开发赛 - 全国三等奖;
2019CODA比赛 - 前 17/211 强 且 荣获“优秀团队”称号 等。 3)“半自媒体人”,
在校期间、个人公众号(IT三少。新自媒体(公众号)号: 码农三少 )
在半年内实现了0到5.8K+的粉丝增长等。

35、搜索插入位置 | 算法(leetode,附思维导图 + 全部解法)300题的更多相关文章

  1. 33、搜索旋转排序数组 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(33)搜索旋转排序数组 一 题目描述! 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 & ...

  2. 32、最长有效括号 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(32)最长有效括号 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 "滑动窗 ...

  3. 31、下一个排列 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(31)下一个排列 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 "双指针法 ...

  4. 34、在排序数组中查找元素的第一个和最后一个位置 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(34)在排序数组中查找元素的第一个和最后一个位置 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: / ...

  5. 36、有效的数独 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(36)有效的数独 前言 1)码农三少 ,一个致力于 编写极简.但齐全题解(算法) 的博主. 2)文末附赠 价值上百美刀 资料. 一 ...

  6. 精心整理「服务器Linux C/C++」 成长路程(附思维导图)

    前言 我不是名校毕业,更没有大厂的背景,我只是一个毕业不到 2 年的普普通通的程序员,在摸爬滚打的工作这段时间里,深知了有一个「完整的知识体系」是非常重要的.当事人非常后悔没有在大学期间知道这个道理- ...

  7. RabbitMQ面试题集锦(精选)(另附思维导图)

    1.使用RabbitMQ有什么好处? 1.解耦,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦! 2.异步,将消息写入消息队列,非必要的业务逻辑以异步的 ...

  8. VIM基础知识整理(附思维导图)

    这是当时初学VIM后做的一个思维导图,图片稍大,所以从freemind导出了html文本po在下面:图片在最下方,放大可清晰浏览. VIM 普通模式 普通编辑命令 功能:浏览,普通编辑 x:删除光标所 ...

  9. web前端开发初学者必看的学习路线(附思维导图)

    很多同学想学习WEB前端开发,虽然互联网有很多的教程.网站.书籍,可是却又不知从何开始如何选取.看完网友高等游民白乌鸦无私分享的原标题为<写给同事的前端学习路线>这篇文章,相信你会有所收获 ...

随机推荐

  1. Python 流程控制-分支结构详解

    目录 Python 流程控制--分支结构 1.结构分类 顺序结构 分支结构 循环结构 2.分支结构详解 分支结构 定义格式: if 单支结构 if 双分支结构 if 多分支结构 Python 流程控制 ...

  2. 我個人喜歡的一些Ubuntu的相關配置

    1.vim vim安裝: sudo apt-get install vim-gtk vim美化:刚安装的VIM,可能界面并不是十分友好,我们可以更改vim的配置文件,按照我们的需求去修改它.在命令行下 ...

  3. python -三元表达式、列表生成式、字典生成式

    目录 1.三元表达式 2.列表生成式 3.字典生成式 1.三元表达式 定义格式:true_return if condition else false_return if 后条件成立返回,true_r ...

  4. [luogu4718]Pollard-Rho算法

    模板题 题解主要分为两部分,即Miller-Robin判素数以及关于Pollard-Rho算法 1.Miller-Robin判素数 对于一个数$n$,判定其是否为素数,依次执行以下几步-- (1)若$ ...

  5. Codeforces 587D - Duff in Mafia(2-SAT+前后缀优化建图)

    Codeforces 题面传送门 & 洛谷题面传送门 2-SAT hot tea. 首先一眼二分答案,我们二分答案 \(mid\),那么问题转化为,是否存在一个所有边权都 \(\le mid\ ...

  6. GWAS数据分析常见的202个问题?

    生信其实很简单,就是用别人的工具调参就行了.生信也很折腾,哪一步都可能遇到问题,随时让你疯掉(老辩证法了~).但是,你遇到的问题大部分人也都经历过.这时,检索技能就显得很重要了.平时Biostar和S ...

  7. R 语言实战-Part 3 笔记

    R 语言实战(第二版) part 3 中级方法 -------------第8章 回归------------------ #概念:用一个或多个自变量(预测变量)来预测因变量(响应变量)的方法 #最常 ...

  8. mac 下 如何在同一窗口打开多个终端并实现快捷键切换

    相信大家编代码的时候都会遇到,每次需要在头文件,库文件和源码文件中编代码的时候,总是需要在几个文件中切换来切换去的,而且一个文件就一个终端窗口,每次都要用鼠标点来点去,非常麻烦,所以如果能把这几个文件 ...

  9. 详解getchar()函数与缓冲区

    1.首先,我们看一下这段代码: 它的简单意思就是从键盘读入一个字符,然后输出到屏幕.理所当然,我们输入1,输出就是1,输入2,输出就是2. 那么我们如果输出的是12呢? 它的输出是1. 这里我们先简单 ...

  10. C语言中的指针与整数相加的值计算

    以下分三种情况: 1. 指针 + 整数值 2. 整数 + 整数  3. 指针强制转换为另一个类型后(指针或者是整数)  +  整数 测试例子: 1 struct AAA{ int a; char b[ ...