【程序员面试金典】面试题 17.04. 消失的数字

【程序员面试金典】面试题 17.04. 消失的数字

    • 题目描述
    • 解题思路

题目描述

描述:数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

注意:本题相对书上原题稍作改动

示例 1:

输入:[3,0,1]
输出:2

示例 2:

输入:[9,6,4,2,3,5,7,0,1]
输出:8

解题思路

思路1:最直观的想法是,使用flag标记数组标记每一个数是否出现过,初始化为false,遍历一遍数组,对出现过的数字进行标记为true,最后再遍历一遍标记数组flag,一旦发现false就记录该数字res并且break,最后返回res即可。

class Solution {
public:
    int missingNumber(vector& nums) {
        int n=nums.size();
        vector flag(n,false);
        int res;
        for(int i=0;i

优化:位运算。求0~n中未出现的数字,等价于该消失的数字的数组(n-1个)以及0~n(n个)中所有数字(2n-1个)中只出现过一次的数字,即将所有数字异或即可。

int missingNumber(vector& nums) 
{
   int res=0;
   int n=nums.size();
   for(int i=0;i

总结:注意,题目描述与题目思想的转化。

你可能感兴趣的:(程序员面试金典,面试,leetcode,算法)