268. Missing Number

給出一個包含 0, 1, 2, ..., n 中 n 個數的序列,找出 0 .. n 中沒有出現在序列中的那個數。

/**
 * Created by Joe on 2018/4/7.
 * 268. Missing Number
 * https://leetcode.com/problems/missing-number/description/
 */
public class P268 {
    public int missingNumber(int[] nums) {
        int sum = 0;
        for(int num: nums)
            sum += num;

        return (nums.length * (nums.length + 1) )/ 2 - sum;
    }
}

因爲假定的是一個連續的序列找缺失數字,所以相當於等差數列求和再減去所給的所有數就是所得。

但是這個方法還是比較笨重,而且有數據溢出的風險,評論區有一個位操作的方法很好。

public int missingNumber(int[] nums) {

    int xor = 0, i = 0;
    for (i = 0; i < nums.length; i++) {
        xor = xor ^ i ^ nums[i];
    }

    return xor ^ i;
}

其主要思路是異或操作,異或操作a^b^b =a,如果有兩個相同的數字進行了^操作,這個數字就會被抵消。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章