每天一道LeetCode-----寻找地增序列中第一个大于等于目标元素的位置
来源:互联网 发布:淘宝还能兑换虾米会员 编辑:程序博客网 时间:2024/05/16 07:47
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; else return 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; else right = 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; else right = middle; /* 加不加都行,因为是左边界,不存在无限循环的问题 */ //if(isBadVersion(left)) // break; // else // ++left; } return left; }};
阅读全文
0 0
- 每天一道LeetCode-----寻找地增序列中第一个大于等于目标元素的位置
- 二分查找最后一个小于等于和第一个大于等于某对象的数组元素位置
- 每天一道LeetCode-----给定序列中2/3/4个元素的和为target的所有集合,或3个元素的和最接近target的集合
- 二分查找、二分查找小于等于key的最后一个元素、二分查找大于等于key的第一个元素
- 每天一道LeetCode-----找到序列中第一个没有出现的正整数,要求时间复杂度是O(n),空间复杂度是O(1)
- 寻找大于n的第一个质数
- 每天一道LeetCode-----寻找二叉搜索树中第k小的元素
- 每天一道LeetCode-----删除序列中指定元素,将满足要求的元素移动到前面
- 数组中大于等于所有元素平均值的元素
- python numpy 数组中元素大于等于0的元素
- 每天一道LeetCode-----某个数在递增序列第一次和最后一次出现的位置
- 二分查找(返回目标元素的第一个位置、最后一个位置)
- 二分查找(返回目标元素的第一个位置、最后一个位置)
- 数组中大于等于平均数的元素的个数
- 写一个函数满足:给定一个int list a,满足a[i+1]>=a[i],给定int key,找出list a中第一个大于等于key的元素的index,无满足要求的元素则返回-1.
- 获取数组元素中右边第一个大于该元素的值
- 每天一道LeetCode-----找出给定序列的所有子序列
- 容器的最后一个元素是否大于第一个元素
- SpringBoot运行的实例
- Mock以及Mockito的使用-5
- DHCP报文
- 休假归来,新的启程
- Unity官方手册翻译之旅---Switching between Unity versions in the documentation
- 每天一道LeetCode-----寻找地增序列中第一个大于等于目标元素的位置
- 副本集RAFT协议的实现(1):heartbeat
- PAT 1034
- 笔记草稿
- css实现文字渐变
- 系统测试策略
- windows应用程序单实例之命名管道
- iOS git~版本管理规范
- 非常可乐(BFS)