acm,牛排怎么做-188bet官网_188bet下载开户_188bet备用网址官网

作者:程序员小吴
大众号:五分钟学算法


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

标题来源于 LeetCode 上第 268 火加韦号问题:缺失数字。标题难度为 Easy,现在码通过率为 50.2% 。

标题描绘

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

阐明:

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

标题解析

这道标题有三种解法。

解法一:异或法

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

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

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

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

代码完成1

class Solution {
    public int missingNumber(int[] nums) {
        int res = 0, i = 0 ;
        //留意数组越界状况
        for ( i = 0; i < nums.length;i++){
            // i 表明完好数组中的数字,与原数组中的数字acm,牛排怎么做-188bet官网_188bet下载开户_188bet备用网址官网 nums[i] 进行异或,再与保存的成果异或
            res = res^i^nums[i];
        }
        //最终需要与循环中无法运用到的那个最大的数异或
        return res^i;
    }
}

代码实箜篌现2

class Solution {
   public int missingNumber(int[] nums) {
    int res = nums.length;
    for (int i 董家欣= 0; i < nums.length; ++i){
        res ^= nums[i];
        res ^= i;
    }
    return res;
  }
}

解法二:求和法

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

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

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

//小吴之前忧虑会数据溢出,不过估量这题调查的不是这个,所以测试用例没写这种吧,仍是能 AC 的
class Solution 徐悲鸿;{
   public int missingNumber(int[斑驳陆离] nums) {
    &nb16岁少年sp;   int n = nums.length;
        int sum = (n+0欣恒源)*(n+1)/2;
        for (int i=0; i<怄气王妃十五岁;n; i++){
            sum -= nums[i];
&n诙谐笑话bsp;       }
      朱媛媛老公;  return acm,牛排怎么做-188bet官网_188bet下载开户_188bet备用网址官网sum;
 }
}

解法三:二分法

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

  • 首要对数组进行排序

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

注:因为一开始进行了排序操作,因而运用二分法的功能是不如上面两种办法。acm,牛排怎么做-188bet官网_188bet下载开户_188bet备用网址官网

public class Solution {
    public int missingNumber(int[] nums) {
        Arrays.soacm,牛排怎么做-188bet官网_188bet下载开户_188bet备用网址官网rt(nums);
        int left = 0;
  &acm,牛排怎么做-188bet官网_188bet下载开户_188bet备用网址官网nbsp;     acm,牛排怎么做-188bet官网_188bet下载开户_188bet备用网址官网int rigacm,牛排怎么做-188bet官网_188bet下载开户_188bet备用网址官网ht = nums.length;
        while (left < right){
   小鹅啄毛怎么回事;      &拓荒运朝帝国气运nbsp; 共享; int mid = (left + right) / 2;
            if (nums[mid] > mid){
                right = mid;
 &nb爸爸哥哥不要sp;         赤舌哪里多 }else{
                left = mid + 1;  
            主播娇喘;}
        }
        return left;
    }
}

END



感谢阅览

引荐阅览:

1:【小编心得】互联网公司实习一年,我被逼知道了这些内情...

2:我想参加阿里,我该怎么做

3:1 行Python代码精干哪些事,这 13个你知道吗?

4:2018年Python爱好者社区历史文章合集(作者篇)

5:2018年终摄影精心收拾|Python爱好者社区历史文章合集(类型篇)


转载原创文章请注明,转载自188bet官网_188bet下载开户_188bet备用网址官网,原文地址:http://www.ccwmj.com/articles/769.html

上一篇:应用心理学,天行-188bet官网_188bet下载开户_188bet备用网址官网

下一篇:天使猫,上海移动网上营业厅-188bet官网_188bet下载开户_188bet备用网址官网