leetcode 算法题268 (简单072) 缺失数字

leetcode 算法题268 (简单072) 缺失数字

  • 题目介绍
给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,
找出 0 .. n 中没有出现在序列中的那个数。
  • 示例

输入: [3,0,1]
输出: 2

输入: [9,6,4,2,3,5,7,0,1]
输出: 8

  • 解法一
/**
 * @param {number[]} nums
 * @return {number}
 */
var missingNumber = function(nums) {
  if(nums.length === 0) {
      return 0;
  }
  if(nums.length === 1) {
      return nums[0] === 0 ? nums.length : 0;
  }
  nums.sort((n1, n2) => n1 - n2)
  console.log(nums);
  let i = nums.length - 1;
  while(i > 0) {
    if(nums[i] - nums[i - 1] !== 1) {
      return nums[i] - 1;
    }
    i--;
  }
 return nums[0] === 0 ? nums.length : 0;
};

执行用时 : 176 ms, 在所有 JavaScript 提交中击败了16.64%的用户

内存消耗 : 38.9 MB, 在所有 JavaScript 提交中击败了5.88%的用户

  • 解法二
/**
 * @param {number[]} nums
 * @return {number}
 */
var missingNumber = function(nums) {
  let temp = new Array(nums.length + 1), i = 0;
  while(i < nums.length) {
    temp[nums[i++]] = 1
  }
  while(i >= 0) {
    if(temp[i] !== 1) {
      return i;
    }
    i--;
  }
};

执行用时 : 80 ms, 在所有 JavaScript 提交中击败了92.55%的用户

内存消耗 : 37.1 MB, 在所有 JavaScript 提交中击败了35.39%的用户

  • 解法三
/**
 * @param {number[]} nums
 * @return {number}
 */
var missingNumber = function(nums) {
  let i = 0, j = 0;
  while (j < nums.length) {
    if (nums[j] !== i) {
      j++;
    } else {
      i++;
      j = 0;
    }
  }
  return i;
};

执行用时 : 296 ms, 在所有 JavaScript 提交中击败了11.61%的用户

内存消耗 : 36.4 MB, 在所有 JavaScript 提交中击败了42.98%的用户

  • 解法四
/**
 * @param {number[]} nums
 * @return {number}
 */
var missingNumber = function(nums) {
  let i = 0, num = 0;
  while (i < nums.length) {
    num ^= (i ^ nums[i++]);
  }
  return num ^ i;
};

执行用时 : 76 ms, 在所有 JavaScript 提交中击败了96.19%的用户

内存消耗 : 36 MB, 在所有 JavaScript 提交中击败了72.40%的用户

上一篇:Sencha Touch(Extjs)


下一篇:LeetCode 268. Missing Number