问题描述

一个长度为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%的用户

《剑指offer》面试题53 - II. 0~n-1中缺失的数字的更多相关文章

  1. [LeetCode]面试题53 - I. 在排序数组中查找数字 I(二分);面试题53 - II. 0~n-1中缺失的数字(二分)

    ##面试题53 - I. 在排序数组中查找数字 I ###题目 统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 ...

  2. [简单-剑指 Offer 53 - II. 0~n-1中缺失的数字]

    [简单-剑指 Offer 53 - II. 0-n-1中缺失的数字] 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一 ...

  3. 剑指 Offer 53 - II. 0~n-1中缺失的数字 + 二分法

    剑指 Offer 53 - II. 0-n-1中缺失的数字 Offer_53 题目详情 java代码 package com.walegarrett.offer; /** * @Author Wale ...

  4. 【剑指offer】53 - II. 0~n-1中缺失的数字

    剑指 Offer 53 - II. 0-n-1中缺失的数字 知识点:数组,二分查找: 题目描述 统计一个数字在排序数组中出现的次数. 示例 输入: nums = [5,7,7,8,8,10], tar ...

  5. 力扣 - 剑指 Offer 53 - II. 0~n-1中缺失的数字

    题目 剑指 Offer 53 - II. 0-n-1中缺失的数字 思路1 排序数组找数字使用二分法 通过题目,我们可以得到一个规律: 如果数组的索引值和该位置的值相等,说明还未缺失数字 一旦不相等了, ...

  6. 剑指 Offer 53 - II. 0~n-1中缺失的数字

    本题 题目链接 题目描述 我的题解 二分法 思路分析 排序数组中的搜索问题,首先想到二分法 当nums[center] > center 时,缺少的数在左区间 当nums[center] = c ...

  7. 【剑指offer】面试题68(补充) 0到n-1中缺失的数字(二分法的进一步应用)

    题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内. 在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 输出 输入:[0,1,2, ...

  8. 一起来刷《剑指Offer》-- 题目一:找出数组中重复的数字(Python多种方法实现)

    数组中重复的数字 最近在复习算法和数据结构(基于Python实现),然后看了Python的各种"序列"--比如列表List.元组Tuple和字符串String,后期会写一篇博客介绍 ...

  9. 剑指Offer面试题:2.二维数组中的查找

    一.题目:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

随机推荐

  1. RegExp正则表达式(三)–js中正则表达式的定义

    在js中,RegExp正则表达式的定义有两种方式:一种是普通方式,另一种是构造函数方式.无论是那种定义正则表达式的方式,它们都会返回RegExp对象. 普通方式定义正则表达式的格式 语法: var 变 ...

  2. JAVA获取html中的所有img链接

    public static List<String> getImageSrc(String htmlCode) { List<String> imageSrcList = ne ...

  3. 【LeetCode】1111. Maximum Nesting Depth of Two Valid Parentheses Strings 有效括号的嵌套深度

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目讲解 划分规则讲解 返回结果讲解 解题方法 代码 日期 题目地址:ht ...

  4. 【九度OJ】题目1191:矩阵最大值 解题报告

    [九度OJ]题目1191:矩阵最大值 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1191 题目描述: 编写一个程序输入一个mXn的 ...

  5. 【LeetCode】74. Search a 2D Matrix 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 左下或者右上开始查找 顺序查找 库函数 日期 题目地 ...

  6. 【LeetCode】390. Elimination Game 解题报告(Python)

    [LeetCode]390. Elimination Game 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/elimina ...

  7. C# 基础(更新中)

    Data Structure There're two types of variables in C#, reference type and value type. Enum: enum Colo ...

  8. 【LeetCode】452. Minimum Number of Arrows to Burst Balloons 解题报告(Python)

    [LeetCode]452. Minimum Number of Arrows to Burst Balloons 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https ...

  9. Network (poj1144)

    A Telephone Line Company (TLC) is establishing a new telephone cable network. They are connecting se ...

  10. 【操作系统】 DOS命令windows批处理batch编程——第一章

    参考网址: http://docs.30c.org/dosbat/index.html 很多情况下,我们只需要记住一条命令 help ,就能掌握整个DOS命令.比如直接输入 help 可以得到命令的帮 ...