问题描述

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
示例 1: 输入: [0,1,3]
输出: 2
示例 2: 输入: [0,1,2,3,4,5,6,7,9]
输出: 8
限制: 1 <= 数组长度 <= 10000

代码

class Solution {
public:
int missingNumber(vector<int>& nums) {
int n = nums.size(),sum = (n*(n+1))/2;
for(int num:nums)
{
sum -= num;
}
return sum;
}
};

结果

执行用时 :44 ms, 在所有 C++ 提交中击败了20.68%的用户
内存消耗 :17.3 MB, 在所有 C++ 提交中击败了100.00%的用户

代码

class Solution {
public:
int missingNumber(vector<int>& nums) {
int n = nums.size(),i;
for(i = 0; i < n; ++i)
{
if(nums[i]!=i)
break;
}
return i;
}
};

结果

执行用时 :44 ms, 在所有 C++ 提交中击败了20.68%的用户
内存消耗 :17.3 MB, 在所有 C++ 提交中击败了100.00%的用户

代码

使用二分法,如果\(nums[middle] == middle\)说明从\([0,middle]\)是正常的,缺少的值在\([middle+1,right]\),如果\(nums[middle] != middle\)说明从\([middle,right]\)已经发生了错位,因此缺少的值在\([left,middle]\)之间。最后要注意的是返回值,很有可能\(0\)到\(n-1\)之间没有缺失,缺少数字\(n\)要特别考虑。

class Solution {
public:
int missingNumber(vector<int>& nums) {
int n = nums.size(),left = 0,right = n-1,middle;
while(left < right)
{
middle = left + (right - left)/2;
if(nums[middle] == middle)
{
left = middle + 1;
}
else
right = middle; }
return left == n-1 && nums[left]==left?left+1:left;
}
};

结果

执行用时 :40 ms, 在所有 C++ 提交中击败了32.99%的用户
内存消耗 :17.3 MB, 在所有 C++ 提交中击败了100.00%的用户

最新文章

  1. Git常用命令总结
  2. Thrift入门及Java实例演示&lt;转载备用&gt;
  3. Linux重置root密码步骤
  4. proxmox3.2安装FreeBSD或者FreeNAS注意事项
  5. ASP.NET验证控件应用实例与详解。
  6. JPA学习---第三节:搭建JPA开发环境和全局事务介绍
  7. Android自定义radiobutton(文字靠左,选框靠右)
  8. 仿QQ5.0以上新版本侧滑效果
  9. C++ Primer 有感(函数)
  10. python 10道面试陷阱题目
  11. eclipse创建动态maven项目
  12. uboot处理dtb
  13. linux命令总结之tr命令
  14. 数据中心 CLOS 架构
  15. python学习 day15 (3月20日)----time
  16. SpringMVC RestTemplate的几种请求调用
  17. VC++ MFC程序设置以管理员权限运行
  18. matlab中log函数与rssi转距离
  19. 想要打动HR的心,UX设计师求职信究竟应该怎么写?
  20. hdu 1828 Picture 切割线求周长

热门文章

  1. CF984B Minesweeper 题解
  2. CF1514A Perfectly Imperfect Array 题解
  3. Shell bash和sh区别
  4. layui(layer)的loading方法显示位置不居中
  5. JAVA里List集合中的对象根据对象的某个属性值降序或者升序排序
  6. 【LeetCode】1021. Best Sightseeing Pair 最佳观光组合(Python)
  7. MCMC using Hamiltonian dynamics
  8. 以简御繁介绍IOC
  9. ARTS Week 19
  10. Java EE数据持久化框架作业目录(作业笔记)