268. Missing Number
2018-03-16 21:59
176 查看
一、题意
Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.
Example 1
Input: [3,0,1]
Output: 2
Example 2
Input: [9,6,4,2,3,5,7,0,1]
Output: 8
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
二、分析和解答
题意要求在一个线性时间内完成,并且使用常数个额外的空间。
这个题和那个找到第一个字符串中不唯一的字符相似。凡是有限个长度的数组都可以考虑这种桶排序或者计数排序的东东。
1、
2、别人的算法
等差数列的和减去目前数组中所有值的和即是所求!
等差数列求和公式:Sn=n(a1+an)/2
一看即知!
3、还有个位运算,使用异或操作。使用数组和0-n进行异或,只有漏掉的那个数是单独的(还是本身),剩下的都会是成对的(为0),结果即为所求。
异或:
a ^ 0 = 0 ^ a = a;
a ^ b = b ^ a ;
a ^ a = 0;
Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.
Example 1
Input: [3,0,1]
Output: 2
Example 2
Input: [9,6,4,2,3,5,7,0,1]
Output: 8
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
二、分析和解答
题意要求在一个线性时间内完成,并且使用常数个额外的空间。
这个题和那个找到第一个字符串中不唯一的字符相似。凡是有限个长度的数组都可以考虑这种桶排序或者计数排序的东东。
1、
public int missingNumber(int[] nums) { int result = -1; int[] arr = new int[nums.length + 1]; for(int i=0;i<nums.length;i++){ arr[nums[i]]++; } for(int i=0;i<arr.length;i++){ if(arr[i] == 0){ result = i; break; } } return result; }
2、别人的算法
等差数列的和减去目前数组中所有值的和即是所求!
public int missingNumber(int[] nums) { int sum = 0; for(int i=0;i<nums.length;i++){ sum += nums[i]; } return (0 + nums.length + 1) * (nums.length) / 2 - sum; }
等差数列求和公式:Sn=n(a1+an)/2
一看即知!
3、还有个位运算,使用异或操作。使用数组和0-n进行异或,只有漏掉的那个数是单独的(还是本身),剩下的都会是成对的(为0),结果即为所求。
异或:
a ^ 0 = 0 ^ a = a;
a ^ b = b ^ a ;
a ^ a = 0;
public int missingNumber(int[] nums) { int res = 0; for(int i=0;i<nums.length;i++){ res = res ^ nums[i] ^ i; } res = res ^ nums.length; return res; }
相关文章推荐
- 268. Missing Number
- Leetcode——268. Missing Number
- 268. Missing Number
- 2018.03.15 leetcode 打卡 #268. Missing Number
- 268. Missing Number
- 268. Missing Number
- [leetcode] 268. Missing Number
- 268. Missing Number
- 268. Missing Number
- Leetcode 268. Missing Number
- [LeetCode]268. Missing Number(求数组中缺失的元素)
- 268. Missing Number
- 268. Missing Number
- <LeetCode OJ> 268. Missing Number
- 268. Missing Number
- 268. Missing Number
- 268. Missing Number
- 268. Missing Number
- 268. Missing Number
- 2018.03.15 leetcode 打卡 #268. Missing Number