給出一個包含 0 .. N 中 N 個數的序列,找出0 .. N 中沒有出現在序列中的那個數。
N = 4
且序列爲 [0,
1, 3]
時,缺失的數爲2
。
/*重新定義一個數組存放排序後的數,空間複雜度和時間複雜度都是O(N)
public class Solution {
public int findMissing(int[] nums) {
// write your code here
boolean[] A = new boolean[nums.length +1];
for(int i = 0;i<nums.length; i++){
A[nums[i]] = true;
}
int n = 0;
for(int i = 0;i< A.length ;i++){
if(A[i] == false){
n = i;
break;
}
}
return n;
}
}*/
//http://www.cnblogs.com/theskulls/p/4943680.html
/*在下面的挑戰中,說可以在原始數組上面操作,如何在原始數組上面操作?空間複雜度並且是O(1)
i^i = 0 一個數自身的異或等於0
這個可以空間複雜可以是O(1),就有下面的代碼了
*/
public class Solution {
public int findMissing(int[] A) {
int len = A.length;
for(int i = 0;i< len;i++){
while( A[i] != i){
if(A[i] <0 || A[i] >= len){
break;
}
int tmp = A[i];
A[i] = A[tmp];
A[tmp] = tmp;
}
}
for(int i =0;i <len;i++){
if(A[i] !=i)
return i;
}
return len;
}
}
/*
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)
return n * (n + 1) / 2 - sum(nums)
*/