题目地址:https://leetcode-cn.com/problems/missing-element-in-sorted-array/

题目描述

Given a sorted array A of unique numbers, find the K-th missing number starting from the leftmost number of the array.

Example 1:

Input: A = [4,7,9,10], K = 1
Output: 5
Explanation:
The first missing number is 5.

Example 2:

Input: A = [4,7,9,10], K = 3
Output: 8
Explanation:
The missing numbers are [5,6,8,...], hence the third missing number is 8.

Example 3:

Input: A = [1,2,4], K = 3
Output: 6
Explanation:
The missing numbers are [3,5,6,7,...], hence the third missing number is 6.

Note:

  1. 1 <= A.length <= 50000
  2. 1 <= A[i] <= 1e7
  3. 1 <= K <= 1e8

题目大意

给出一个有序数组 A,数组中的每个数字都是 独一无二的,找出从数组最左边开始的第 K 个缺失数字。

解题方法

遍历

拿到这个题之后,看了下Note中取值范围都比较大,因此如果想一个数字一个数字去判断的话肯定会超时。所以需要使用一个点小技巧,即跳过不需要判断的数字。直接计算出每两个相邻数字之间能满足多少个,从而更新k。

先对nums排序。然后开始遍历,计算nums相邻两个元素之间的数字数即nums[i] - pre - 1个,是否可以满足需要的k。如果能满足,那么直接找出要返回的数字pre+k。如果不能满足,把k去掉已能满足的数字nums[i] - pre - 1。最后如果所有的nums数字都已经用完,但是还不能满足k,则需要返回nums[nums.size() - 1] + k

C++代码如下:

class Solution {
public:
int missingElement(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
int pre = nums[0];
for (int i = 1; i < nums.size(); ++i) {
if (k < nums[i] - pre) {
return pre + k;
} else {
k -= nums[i] - pre - 1;
}
pre = nums[i];
}
return pre + k;
}
};

日期

2019 年 9 月 21 日 —— 莫生气,我若气病谁如意

最新文章

  1. vim ---- 一键自动indent的命令
  2. Swift游戏实战-跑酷熊猫 09 移除场景之外的平台
  3. c# partial类
  4. Android 自定义Button按钮显示样式(正常、按下、获取焦点)
  5. Unity3d UnityEditor EditorWindow 自定义窗体控件
  6. Foreign Exchange(交换生换位置)
  7. 怎么在ubuntu上运行php代码?
  8. jsp+struts2登录框架模板
  9. 重建docker实例
  10. (简单)华为M3青春 CPN-AL10的Usb调试模式在哪里打开的步骤
  11. BZOJ3718[PA2014]Parking——树状数组
  12. [Easyui - Grid]为easyui的datagrid、treegrid增加表头菜单,用于显示或隐藏列
  13. JQuery.validate 错误信息对话框
  14. AJAX通过HTML请求C#一般处理程序
  15. 《linux内核设计与实现》第二章
  16. artdialog5 bug
  17. python学习之老男孩python全栈第九期_数据库day004知识点总结 —— MySQL数据库day4
  18. 深入理解Java类加载器(1)
  19. Yii隐藏单入口
  20. JS模拟Dictionary

热门文章

  1. Ubuntu 彻底卸载 MySQL 数据库
  2. 基因组共线性分析工具MCScanX
  3. oracle 将电话号码中间4位数以星号*代替
  4. 一个简单但能考察C语言基础的题目
  5. 进程和线程操作系统转载的Mark一下
  6. 计算机网络-4-7-内部网关协议OSPF
  7. C#时间选择
  8. 【.Net】使用委托实现被引用的项目向上级项目的消息传递事件
  9. 源码分析-NameServer
  10. spring生成EntityManagerFactory的三种方式