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,如果有两个相同的数字进行了^操作,这个数字就会被抵消。

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