LeetCode: 268. Missing Number

xiaoxiao2021-02-28  107

LeetCode: 268. 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.

Note: Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?

Credits: Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

自己的答案,13ms:

public class Solution { public int missingNumber(int[] nums) { if (nums == null || nums.length == 0) { return 0; } Arrays.sort(nums); int i = 0; for (i = 0; i < nums.length; i++) { if (nums[i] != i) { return i; } } return i; } }

最快的答案,1ms:

public class Solution { public int missingNumber(int[] nums) { int sum = 0; for (int i = 0; i < nums.length; i++) { sum += nums[i]; } return (nums.length * (nums.length + 1)) / 2 - sum; } }

3 different ideas: XOR, SUM, Binary Search. Java code xor:

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

求和:

public int missingNumber(int[] nums) { //sum int len = nums.length; int sum = (0+len)*(len+1)/2; for(int i=0; i<len; i++) sum-=nums[i]; return sum; }

二分查找:

public int missingNumber(int[] nums) { //binary search Arrays.sort(nums); int left = 0, right = nums.length, mid= (left + right)/2; while(left<right){ mid = (left + right)/2; if(nums[mid]>mid) right = mid; else left = mid+1; } return left; }
转载请注明原文地址: https://www.6miu.com/read-18094.html

最新回复(0)