零 标题:算法(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. updatexml和extractvalue函数报错注入

    updatexml()函数报错注入 updatexml (XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式,为XM ...

  2. 菜鸡的Java笔记 第九 - java 接收键盘输入

    package mysterious; import java.util.Scanner; public class lianxi { public static void hhh (){ Scann ...

  3. myeclipse与tomcat,运行jsp程序

    一.myeclipse中配置JRE 步骤: 1.选择window->preferences->Java->Installed JREs 2.点击窗口右边的"add" ...

  4. [hdu5901]Count primes

    最简单的是利用Min25筛求$h(n)$的过程,即 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 1000005 ...

  5. [atARC110E]Shorten ABC

    考虑令$a$.$b$和$c$分别对应1.2和3,那么每一次相当于令$x$和$y$变为$x\oplus y$(要求$x\ne y$) 根据异或的结合律,我们相当于将其划分为若干个区间求异或值 (另外还有 ...

  6. [loj3048]异或粽子

    先对其求出前缀异或和,然后$o(k)$次枚举,每次选择最大值,考虑如何维护可以全局开一个堆,维护出每一个点的最大值的最大值,那么相当于要在一个点中删去一个点再找到最大值将这些删去的点重新建成一颗tri ...

  7. GPG 使用指南

    加密与签名 在传输信息时,会面临两个典型的问题: 如何保证发出的消息,只能被预期的接收人获取? 如何保证收到的消息,确实由预期的发送人发出? 这两个问题不难理解.例如发送的邮件可能会被监听,诈骗分子可 ...

  8. Java生产环境JVM设置成固定堆大小深层原理

    可能很多人都知道Java程序上生产后,运维人员都会设定好JVM的堆大小,而且还是把最大最小设置成一样的值.那究竟是为什么呢?一般而言,Java程序如果你不显示设定该值得话,会自动进行初始化设定. -X ...

  9. Linux mount挂载磁盘报错 mount: wrong fs type, bad option, bad superblock on /dev/vdb

    Linux mount挂载磁盘报错  mount: wrong fs type, bad option, bad superblock on /dev/vdb Linux挂载磁盘报如下错误: moun ...

  10. 半天做完的数据报表,YonBuilder只要十几分钟,0代码开发

    进入数字化时代,拍脑袋的决策方式显然不靠谱,一切要靠数据说话.与信息化时代相比,数字化时代的企业对数据的应用更广泛.更深入.为了应对激烈的市场竞争,企业经营决策者们对数据的依赖度越来越高,企业各个业务 ...