LeetCode 1060. 有序数组中的缺失元素(二分查找)
文章目录
- 1. 题目
- 2. 解题
- 2.1 一次遍历
- 2.2 二分查找
1. 题目
给出一个有序数组 A,数组中的每个数字都是 独一无二的,找出从数组最左边开始的第 K 个缺失数字。
示例 1:
输入:A = [4,7,9,10], K = 1
输出:5
解释:
第一个缺失数字为 5 。示例 2:
输入:A = [4,7,9,10], K = 3
输出:8
解释:
缺失数字有 [5,6,8,...],因此第三个缺失数字为 8 。示例 3:
输入:A = [1,2,4], K = 3
输出:6
解释:
缺失数字有 [3,5,6,7,...],因此第三个缺失数字为 6 。提示:
1 <= A.length <= 50000
1 <= A[i] <= 1e7
1 <= K <= 1e8
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/missing-element-in-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
2.1 一次遍历
- 相邻的数做差,进行判断,对 k 进行更新,直到 k <= 0 停止
class Solution {public:int missingElement(vector<int>& nums, int k) {int i = 0, n = nums.size(), ans;for(i = 0; i < n-1; ++i){if(nums[i+1]-nums[i]-1 < k)k -= nums[i+1]-nums[i]-1;else{ans = nums[i]+k;return ans;}}return nums[n-1]+k;}
};
124 ms 29.6 MB
2.2 二分查找
class Solution {public:int missingElement(vector<int>& nums, int k) {int l = 0, r = nums.size()-1, mid, miss;while(l <= r){mid = l+((r-l)>>1);miss = countmissing(nums, mid);if(miss < k)l = mid+1;else if(miss > k)r = mid-1;elsereturn nums[mid]-1;}return nums[r]+k-countmissing(nums,r);}int countmissing(vector<int>& nums, int i){return nums[i]-nums[0]-i;}
};
144 ms 29.6 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 1060. 有序数组中的缺失元素(二分查找)相关推荐
- LeetCode 540. 有序数组中的单一元素(Single Element in a Sorted Array) 42
540. 有序数组中的单一元素 540. Single Element in a Sorted Array 题目描述 每日一算法2019/6/14Day 42LeetCode540. Single E ...
- LeetCode 540. 有序数组中的单一元素(c语言实现)
540. 有序数组中的单一元素 给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次. 请你找出并返回只出现一次的那个数. 你设计的解决方案必须满足 O(log n) 时间 ...
- LeetCode 540. 有序数组中的单一元素(位运算二分查找)
1. 题目 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数. 示例 1: 输入: [1,1,2,3,3,4,4,8,8] 输出: 2示例 2: 输入: [3,3 ...
- LeetCode 540 有序数组中的单一元素
题目描述 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这 个数. 题解 二分查找 代码 class Solution { public:int singleNonD ...
- LeetCode 540.有序数组中的单一元素
目录 题目 示例 C语言代码 逐个异或 正常遍历 题目 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数. 示例 输入: nums = [1,1,2,3,3,4, ...
- 「 每日一练,快乐水题 」540. 有序数组中的单一元素
✅力扣原题: 力扣链接:540. 有序数组中的单一元素 ✅题目简述: 给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次. 请你找出并返回只出现一次的那个数. 你设计的解 ...
- 540. 有序数组中的单一元素 golang
540. 有序数组中的单一元素 golang func singleNonDuplicate(nums []int) int {if len(nums) <= 1 {return nums[0] ...
- 力扣 26.删除有序数组中的重复元素
文章目录 题目 思路 AC代码 收获 题目 删除有序数组中的重复元素 思路 快慢指针.快指针不断向前走.判断快指针所指的数与快指针前面的数是否相等,如果相等就说明是重复的,要继续向后移动,如果不相等, ...
- 540. 有序数组中的单一元素
540. 有序数组中的单一元素 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数. 示例 1: 输入: [1,1,2,3,3,4,4,8,8] 输出: 2 示例 ...
最新文章
- 【小知识】C、C++ 中const的实现机制
- 一些VR延迟优化方法
- 科大星云诗社动态20201216
- mac下iterm配色、半透明与样式设置
- redis的分布式解决方式--codis
- HH SaaS电商系统的商品营销角标功能模块设计
- 20160821_第三周周报
- python根据ip获取地理位置_使用python根据ip获取目标地理位置信息
- 开发过程中解决各种跨域问题
- React:Hook
- sendkeys安装包_利用Windows命令行解压zip压缩文件(不借助第三方软件)
- R语言和Rstudio的介绍和安装
- Arduino ESP8266利用SPIFFS上传文件和查看文件
- 最近在论证一个问题,到底是先有鸡还是先有蛋:
- Django个人博客搭建4-配置使用 Bootstrap 4 改写模板文件
- html文件设置成mac桌面,Mac软件教程:让你的Mac桌面放入无限多的文件
- 软件测试前景怎么样?大概要学什么?
- 为什么不要去小公司上班?这是我血与泪的教训!!!
- C++之operator关键字作用(一百一三十)
- linux安装python3