• 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;
        }
    };
  • 相关阅读:
    JUnitBeforeClass、AfterClass、Before、After示例
    4 jquery中dom操作和事件的实例学习访yahoo邮箱登录框的提示效果
    2 jquery 强大的选择器
    3 jquery对象和dom对象的相互转换
    开博第一篇
    转载notepad++ zendcoding使用
    轻描淡写的日子
    测试
    BPMN中的任务(task)介绍
    Google App Engine正式对Java进行支持
  • 原文地址:https://www.cnblogs.com/shirley-ict/p/5475258.html
Copyright © 2020-2023  润新知