Search Insert Position

原题链接Search Insert Position

要求找到目标出现的位置或者应该插入的位置,本质上就是找第一个大于等于目标元素的位置,直接调用lower_bound就解决了。当然也可以自己利用二分法重新实现

class Solution {
public:int searchInsert(vector<int>& nums, int target) {//auto it = lower_bound(nums.begin(), nums.end(), target);//return it - nums.begin();/* * 如果只有一个元素,会直接返回0* 如果所有元素都小于target,会返回nums.size() - 1,需要加1* 所以需要返回后判断一次nums[left]的大小*/int left = equalLeftBound(nums, target);if(nums[left] < target)return left + 1;elsereturn left;}private:/* 找到第一个出现target的位置 */int equalLeftBound(vector<int>& nums, int target){int left = 0;int right = nums.size() - 1;while(left < right){int middle = (left + right) / 2;if(nums[middle] < target)left = middle + 1;elseright = middle;}return left;}
};

First Bad Version

原题链接First Bad Version

找到第一个isBadVersion(version)返回true的位置,和上面的一样。不过需要注意的地方是二分法求中点时(left + right) / 2可能会溢出,可以采用left + (right - left) / 2的方式避免溢出

// Forward declaration of isBadVersion API.
bool isBadVersion(int version);class Solution {
public:int firstBadVersion(int n) {return equalLeftBound(n);}private:int equalLeftBound(int n){int left = 1;int right = n;while(left < right){int middle = left + (right - left) / 2;bool isBad = isBadVersion(middle);if(!isBad)left = middle + 1;elseright = middle;/* 加不加都行,因为是左边界,不存在无限循环的问题 *///if(isBadVersion(left))//     break;// else//    ++left;}return left;}
};

每天一道LeetCode-----寻找地增序列中第一个大于等于目标元素的位置相关推荐

  1. 如何寻找无序数组中的第K大元素?

    如何寻找无序数组中的第K大元素? 有这样一个算法题:有一个无序数组,要求找出数组中的第K大元素.比如给定的无序数组如下所示: 如果k=6,也就是要寻找第6大的元素,很显然,数组中第一大元素是24,第二 ...

  2. 分治法——查找问题 —— 寻找一个序列中第k小的元素和查找最大和次大元素

    查找问题: 问题一:寻找一个序列中第k小的元素 对于给定的含有n个元素的无序序列,求这个序列中第k(1<=k<=n)小的元素 分析思路: 假设无序序列存放在a[0 - n-1]中,若将a递 ...

  3. LeetCode 378. 有序矩阵中第K小的元素(二分查找)

    文章目录 1. 题目 2. 解题 2.1 暴力法 2.2 二分查找 1. 题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素. 请注意,它是排序后的第k小元素,而 ...

  4. [leetcode]378. 有序矩阵中第 K 小的元素

    378. 有序矩阵中第 K 小的元素 题目链接 思路分析 代码实现 题目链接 378. 有序矩阵中第 K 小的元素 思路分析 题目中又一次提到了有序,就能够猜想能够使用二分法 那么如果要使用二分的话, ...

  5. Leetcode 378. 有序矩阵中第K小的元素 解题思路及C++实现

    解题思路: 使用一个最大堆遍历matrix中的数.保持最大堆中的元素数量不超过k,最后得到的堆顶元素值就是第k小的数. class Solution { public:int kthSmallest( ...

  6. 一篇文章告诉你如何寻找水王(数组中存在超过一半的数字)

    #include<iostream> using namespace std; //case1 排序后返回数组中间的那个数字O nlogn //case2 hash统计 //case3 顺 ...

  7. 去掉数组最后一个元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置每天刷一道leetcode算法系列!...

    作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...

  8. c++两个数组对比去掉重复的元素_每日一道 LeetCode (8):删除排序数组中的重复项和移除元素...

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

  9. 寻找字符串中第一个仅仅出现一次打字符

    寻找字符串中第一个仅仅出现一次打字符 代码例如以下: #include <iostream> #include <string>using namespace std;char ...

最新文章

  1. MySqli 连接失败 MySQL connection not working: 2002 No such file or directory
  2. Eclipse中创建SpringBoot项目流程,及报错解决方案
  3. 安卓使用 HTTP 协议访问网络
  4. flink 7-提交任务
  5. SLAM: Inverse Depth Parametrization for Monocular SALM
  6. 十、关于MySQL 标识列,你该了解这些!
  7. 张珺 2015/07/13 个人文档
  8. git 安装及常用命令
  9. 前端技术周刊 2018-08-06:ES Module
  10. BOOST库介绍(二)——BOOST多线程相关库
  11. H5游戏开发-游戏的介绍
  12. 基于Android新闻RSS阅读器客户端app
  13. 方便好用的论文管理软件EndNote X9 + PDF阅读编辑器Adobe Acrobat DC(2)
  14. Xshell使用基础教程
  15. 考证党必备的5个神仙APP,助你日常高效充电
  16. 王者服务器维护5月1日,5月30日体验服停机更新公告
  17. IDEA新建项目需要新建好文件夹
  18. python之plt.figure
  19. 破开C暗夜的第一道光(2)——高质量代码风格
  20. java中Scanner扫描器

热门文章

  1. 阿里巴巴集团2014秋季校园招聘笔试题
  2. CentOS7 设置主机名及IP映射
  3. 苹果开发账号过期不续费会怎样?
  4. 机器学习之五:神经网络、反向传播算法推导
  5. KMP算法的nextval[] 即优化next[]
  6. Uva 11600 期望DP
  7. 全球唯一标识GUID
  8. Windows下SVN服务器的搭建步骤
  9. Javascript闭包与作用域
  10. [知识图谱实战篇] 八.HTML+D3绘制时间轴线及显示实体