zoukankan      html  css  js  c++  java
  • leetcode| Missing Number

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.

    For example,
    Given nums = [0, 1, 3] return 2.

    题目:找出那个数组中缺失的元素,如果0,1,3那就是缺2。。。。。。

    思路:一开始我是想,对数组求和sum1,对没有缺失的数组求和sum2,sum2-sum1即为所求,但是看了讨论区,这道题目目前来说跟茴香豆的茴字一样,有四种解法

    1,如思路中上所表述,代码略,因为在其他三种面前真是相形见绌,没脸贴!

    2,跟第一有所不同,比第一种聪明,它是用等差数列求和公式Sn=n(a1+an)/2,出sum2,用sum2依次减去nums的每一元素,最后得到所求,

    public int missingNumber(int[] nums) {

      int len = nums.length;

      int sum = (len+1)*len/2;

      for(int i = 0;i<len;i++){

        sum -=nums[i]; 

      }

      return sum;

    }

    3,用位运算,异或XOR,根据异或的性质,n和0的异或为n,n和n的异或为0,

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

    4,BinarySearch 二分法查找,这种方法效率在数组有序的情况下比较高,

    public int missingNumber(int [] nums){

      Arrays.sort(nums);

      int min = 0,max = nums.length-1;

      while(min < max){

        int mid = (min+max)/2;

        if(nums[mid] == mid){

          min = mid+1;

        }else{

          max = mid-1;

        }

       }

      return nums[min] ==min?min+1:min;

    }

     
    StayHungry 求知若渴 StayFoolish 放低姿态
  • 相关阅读:
    datanode报错Problem connecting to server
    使用命令查看hdfs的状态
    Access denied for user root. Superuser privilege is requ
    ElasticSearch默认的分页参数 size
    SparkStreaming Kafka 维护offset
    【容错篇】Spark Streaming的还原药水——Checkpoint
    251 Android 线性与相对布局简介
    250 Android Studio使用指南 总结
    249 如何解决项目导入产生的中文乱码问题
    248 gradle更新问题
  • 原文地址:https://www.cnblogs.com/wujunjie/p/5688068.html
Copyright © 2011-2022 走看看