• LeetCode:缺失数字


    题目内容


    给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
    示例 1:

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

    示例 2:

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

    说明:
    你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?


    解题

    解题思路

    • 1.直接将数组元素排序
    • 2.从0开始循环判断找到下标和数组下标元素不对应的项

    代码实现

    public class Solution {
        public int MissingNumber(int[] nums) 
        {
            //排序数组
            Array.Sort(nums);
            int i = 0, end = nums[nums.Length - 1];
            //循环找到不对应项
            while (i <= end && i == nums[i])
            {
                i++;
            }
    
            //返回不对应项元素
            return i;
        }
    }
    

    改进一

    解题思路

    虽然上面的解法可以将值求出来但是没法满足“线性时间复杂度”这个要求

    • 1.可以采用桶排序思想,先创建一个桶【bool[]数组】
    • 2.然后循环遍历将值对应下标位置设置为true
    • 3.遍历这个桶得到第一个为false的下标位置

    代码实现

    public class Solution {
        public int MissingNumber(int[] nums) 
        {
            //创建桶
            var bucket = new bool[nums.Length + 1];
            //循环遍历将值对应下标位置设置为true
            for (int i = 0; i < nums.Length; i++)
            {
                bucket[nums[i]] = true;
            }
    
            //遍历这个桶得到第一个为false的下标位置
            int j = 0;
            while (bucket.Length > j && bucket[j])
            {
                j++;
            }
    
            return j;
        }
    }
    

    改进二

    解题思路

    虽然上面的解法虽然满足了“线性时间复杂度”要求,但是需要使用“额外的非常数空间

    • 1.先计算出0+1+2....+n 的和
    • 2.循环将元素从总和中减去,剩余的数就是缺失的数了

    代码实现

    public class Solution {
        public int MissingNumber(int[] nums) 
        {
            var sum = ((nums.Length + 1) * nums.Length) / 2;
            for (int i = 0; i < nums.Length; i++)
            {
                sum -= nums[i];
            }
    
            return sum;
        }
    }
    
  • 相关阅读:
    清除浮动的三种方式
    js控制滚动条默认在底部
    npm 基础命令
    package.json中^,~的区别
    mac 使用iTerm2快捷登录远程服务器
    iterm 分屏切换快捷键与配色设置
    git tag — 标签相关操作
    gulp iconfont
    webpack 3 升级 webpack4 个人笔记
    import * as x from 'xx' 和 import x from 'xx'
  • 原文地址:https://www.cnblogs.com/liuzhenliang/p/LeetCode-TheMissingNumber.html
Copyright © 2020-2023  润新知