zoukankan      html  css  js  c++  java
  • Missing Number 三种解法

    题目链接:https://leetcode.com/problems/missing-number/

    解法1)根据不缺失情况下的数字和-缺失情况下的数字和就是缺失的数字,代码如下:

    class Solution
    {
    public:
        int missingNumber(vector<int>& nums)
        {
            int n = nums.size();
            int sum = 0;
            for(int i=0; i<n; ++i)
            {
                sum += nums[i];
            }
    
            int total = 0;
            for(int i=0; i<=n; ++i)
            {
                total += i;
            }
            return total - sum;
        }
    };

    解法2)使用异或来解决,首先1~n先进行一次异或,然后对数组中的数字再异或一次,由于a^a得到的是0,因此有一个数字在异或过程中无法消除,该数字即为缺失的数字,代码如下:

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

    解法3)使用二分搜索,但是本题的要求是O(n)的时间复杂度,不符合要求,但是如果数组已经是有序的,则二分搜索将成为最好的算法,代码如下:

    class Solution
    {
    public:
        int missingNumber(vector<int>& nums)
        {
            sort(nums.begin(), nums.end());
            int l = 0;
            int r = nums.size() - 1;
            while(l < r)
            {
                int m = l + ((r - l) >> 1);
                if(nums[m] == m)
                {
                    l = m + 1;
                }
                else
                {
                    r = m - 1;
                }
            }
            int res = l == nums[l] ? l + 1 : l;
            // 如果是l == nums[l] 说明缺少的是最后一个数字
            return res;
        }
    };
  • 相关阅读:
    Eclipse Java开发环境配置 + memcached + maven
    sqlserver数据库自动备份
    从表A中选择部分字段插入到表B
    电信IOT平台关于产品profile插件的添加流程
    SQLServer查询耗时sql语句
    net core 包管理
    byte[] 截串操作
    关于kafka启动失败问题
    springboot 搭建maven项目
    C# MongoDB学习之路(一)
  • 原文地址:https://www.cnblogs.com/shirley-ict/p/5475258.html
Copyright © 2011-2022 走看看