[LeetCode] Missing Number 丢失的数字
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.
For example,
Given nums = [0, 1, 3] return 2.
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
这道题给我们n个数字,是0到n之间的数但是有一个数字去掉了,让我们寻找这个数字,要求线性的时间复杂度和常数级的空间复杂度。那么最直观的一个方法是用等差数列的求和公式求出0到n之间所有的数字之和,然后再遍历数组算出给定数字的累积和,然后做减法,差值就是丢失的那个数字,参见代码如下:
解法一:
class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int sum = , n = nums.size();
        for (auto &a : nums) {
            sum += a;
        }
        return 0.5 * n * (n + ) - sum;
    }
};
这题还有一种解法,使用位操作Bit Manipulation来解的,用到了异或操作的特性,相似的题目有Single Number 单独的数字, Single Number II 单独的数字之二和Single Number III 单独的数字之三。那么思路是既然0到n之间少了一个数,我们将这个少了一个数的数组合0到n之间完整的数组异或一下,那么相同的数字都变为0了,剩下的就是少了的那个数字了,参加代码如下:
解法二:
class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int res = ;
        for (int i = ; i < nums.size(); ++i) {
            res ^= (i + ) ^ nums[i];
        }
        return res;
    }
};
这道题还可以用二分查找法来做,我们首先要对数组排序,然后我们用二分查找法算出中间元素的下标,然后用元素值和下标值之间做对比,如果元素值大于下标值,则说明缺失的数字在左边,此时将right赋为mid,反之则将left赋为mid+1。那么看到这里,作为读者的你可能会提出,排序的时间复杂度都不止O(n),何必要多此一举用二分查找,还不如用上面两种方法呢。对,你说的没错,但是在面试的时候,有可能人家给你的数组就是排好序的,那么此时用二分查找法肯定要优于上面两种方法,所以这种方法最好也要掌握以下~
解法三:
class Solution {
public:
    int missingNumber(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        int left = , right = nums.size();
        while (left < right) {
            int mid = left + (right - left) / ;
            if (nums[mid] > mid) right = mid;
            else left = mid + ;
        }
        return right;
    }
};
在CareerCup中有一道类似的题,5.7 Find Missing Integer 查找丢失的数,但是那道题不让我们直接访问整个int数字,而是只能访问其二进制表示数中的某一位,强行让我们使用位操作Bit Manipulation来解题,也是蛮有意思的一道题。
LeetCode All in One 题目讲解汇总(持续更新中...)
[LeetCode] Missing Number 丢失的数字的更多相关文章
- [LeetCode] 268. Missing Number ☆(丢失的数字)
		转载:http://www.cnblogs.com/grandyang/p/4756677.html Given an array containing n distinct numbers take ... 
- [LeetCode] Single Number  单独的数字
		Given an array of integers, every element appears twice except for one. Find that single one. Note:Y ... 
- [LeetCode] 268. Missing Number 缺失的数字
		Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ... 
- LeetCode OJ:Missing Number (丢失的数)
		Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ... 
- 268 Missing Number 缺失的数字
		给出一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数.案例 1输入: [3,0,1]输出: 2案例 2输入: [9,6,4,2,3,5,7, ... 
- (leetcode)Missing Number
		Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ... 
- [LeetCode] Missing Number (A New Questions Added Today)
		Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ... 
- leetcode:Palindrome Number (判断数字是否回文串) 【面试算法题】
		题目: Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could neg ... 
- LeetCode——Missing Number
		Description: Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one t ... 
随机推荐
- Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)
			Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ... 
- CSS知识总结(四)
			CSS常用样式 2.元素样式 1)宽度 width:auto|length 单位:设置以像素计的宽度值(px) 设置以百分比计的宽度值(%) 例:p {width:200px;} div {width ... 
- 介介介是一个ORM
			介个是一个ORM,介个ORM基于Dapper扩展. 为什么需要一个ORM呢? 支持简单的LINQ查询 但是不能连表查询,why?why?why?为什么不能连接查询 ^.^ ok.但是就是不支持.哈哈哈 ... 
- “RazorEngine.Templating.TemplateCompilationException”类型的异常在 RazorEngine.NET4.0.dll 中发生,但未在用户代码中进行处理
			错误信息: "RazorEngine.Templating.TemplateCompilationException"类型的异常在 RazorEngine.NET4.0.dll 中 ... 
- Dapper-据说stackoverflow使用的orm
			using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; usin ... 
- ctags
			ctags是vim中非常好用的一个标签工具,你可以使用ctags跳转到函数定义的位置.下面总结一下如何安装和使用. 安装:sudo apt-get install ctags 
- canvas调用scale或者drawImage图片操作后,锯齿感很明显的解决
			<script type="text/javascript"> //解决canvas画画图片 var mengvalue = -1; var phoneWidth = ... 
- Nginx配置文件nginx.conf中文详解(转)
			######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ... 
- SSH框架使用注解简化代码
			注释的优势: 1.最简单直接的优势就是减少了配置文件的代码量. 2.注释和Java代码位于一个文件中,而XML 配置采用独立的配置文件.配置信息和 Java 代码放在一起,有助于增强程序的内聚性.而采 ... 
- javascript 练习示例(一)
			confirm 点确定返回true,点取消返回false prompt 点确定返回用户输入的字符串,点取消返回null 判断奇偶性 var isOdd = prompt('请输入你得的数字'); if ... 
