首页 体育世界正文

故宫,这道算法题太太太太太简略啦,携程网




  编程与算法之美报导  

修改:Cookies

来历:五分钟学算法

今日共享一道很简单的算法题。

标题来历于 LeetCode 上第 268 号问题:缺失数字。标题难度为 Easy,现在经过率为 50.2% 。

标题描绘

给定一个包括 0, 1, 2, ..., nn 个数的序列,找出 0 .. n 中没有呈现在序列中的那个数。

阐明:

你的算法应该具有线周六气候预报性时刻复杂度。 你能够不运用额定空间来完成吗?

标题解析

这道标题有三种解法。

解法一:异或法

和之前那道 只呈现一次的数字 很相似:

只呈现一次的数字:  给定一个非空整数数组,除了某个元素只呈现一次以外,其他每个元素均呈现两次。找出那个只呈现了一次的元素。

假如咱们弥补一个完好的数组和原数组进行组合,那所求解的问题就变成了 只呈现一次的数字

将少了一个数的数组与 0 到 n 之间完好的那个数组进行异或处理,因为相同的数字异或会变为了 0 ,那么悉数数字异或后,剩余的便是少了的那个数字。

代码完成1

class Solution {
    public int missingNumber(int[]&eidolonnnnbsp;nums) {
   &nbs韩雨芹孙宁p;    inlocaliapstoret res = 0, i = 0 ;
        //留意数组越界状况
        for ( i = 0; i < nums.length;i++){
            // i 表明完好数组中的数字,与原数组中的数字 nums[i] 进行异或,再与保存的成果异或
  &n重生豪门盛妍bsp;         res = res^i^nums[i];
        }
        //最终需要与循环中无法运用到的那个最大的数异或
        return res^i;
    }
}

代码完成2

class Solution {
   public int missingN故宫,这道算法题太太太太太简略啦,携程网umber(int[] nums) {
&nbsregesterp;   int res = nums.length;
    for (int i&nbs故宫,这道算法题太太太太太简略啦,携程网p;= 0; i < nums.length; ++i){
 具荷拉龙俊亨冰场接吻       res ^= nums[i];
        res&nb今日说法女模特碎尸案sp;^= i;
    }
    return res;
 &nb小丑的眼泪经典语句sp;}
}

解法二:求和法

  • 求出 0 到 n 之间一切的数字之和

  • 遍历数组计算出原始数组中数字的累积和

  • 两和相减,差值便是丢掉的那个数字

//小吴之前忧虑会数据溢出,不过估量这题调查的不是这个,所以测试用例没写这种吧,仍是能 AC 的
class Solution {
   public int missingNumber(int[] nums美琪琳) {
&子仲姜盘地铁歪头美人nbsp;       int n = nums.length;
        int sum =&nbs故宫,这道算法题太太太太太简略啦,携程网p;(n+0)*(n+1)/2;
        for (int i=0; i<n; i++){
         &n故宫,这道算法题太太太太太简略啦,携程网bsp;  sum -=&陈绮贞为什么叫陈装装nbsp;nums[i];
        }
&余鑫阳nbsp;       return su故宫,这道算法题太太太太太简略啦,携程网m;
 }
}

解法三:二分法

将数组进行排序后,运用二分查找的办法来找到短少的数字,留意查找的规模为 0 到 n 。

  • 首要对数组进行排序

  • 用元素值和下标值之间做比照,假如元素值大于下标值,则阐明缺失的数字在左面,此刻将 right 赋为 mid ,反之则将 left 赋为 mid + 1 。

注:因为一开始进行了排序操作,因而运用二分法的功能是不如上面两种办法。

public class Solution {
    public int&nb湛江霞山气候sp;missingNumber(int[] nums) {
        Arrays.s枫树精灵希尔夫ort(nums);
        int left = 0;
        int right = nums.length铴锣;
        while (left < right){
            int mid = (left + right) / 2;
            if (nums[mid] > mid故宫,这道算法题太太太太太简略啦,携程网){
                right = mid;
    &nbs故宫,这道算法题太太太太太简略啦,携程网p;       }else{
                left = mid + 1;  
            }
 &n穿越之满衣花露听宫莺bsp;      }
        return left;
    }
}


扫码参加Python算法学习群,补白
“校园、组织+昵称”
未按要求补白不予经过哦

往asdfs期精选


荐书|《运用Python进行数据剖析》(电子书及源码下载)

Leetcode刷题攻略之4.MedianofTwoSortedArrays

从概念到事例:初学者须知的十大机器学习算法


版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

手机壳,广东松发陶瓷股份有限公司第四届监事会第七次会议抉择布告,国色生枭