268. Missing Number

来源:互联网 发布:linux中连接本地 编辑:程序博客网 时间:2024/05/20 05:31

1.原数列origin_array 的和  减去  少了一个数字的数列sub_array的和,注意原数列是0 1 2 3 - - - n的n+1个数字,比少了一个数字的数列的长度多1。

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


2.

2.1  0与任何数异或一次的结果都是任何数,即 0 ^ x = x

2.2  任何相同的数与自己异或,结果都为0,结合 2.1规则,推导出  a ^ x ^ x = a ^ 0 = a

2.3  将一组数依次异或,若里面只有一个只出现一次的数,其他的数都出现两次,则最后的结果必然是那个只出现一次的数,因为相同两个数异或,结果都变成了0,0与只出现一次的数字异或,结合2.2规则,则结果是只出现1次的那个数字

比如 1  1  2  3  3 , 1 ^ 1 ^ 2 ^ 3 ^ 3 = 2 

2.4 针对此题,原始数列 和 少了一个数的数列 各自全部异或,最后两个异或的结果再异或,就是找出两个数组中只出现一个次的数字

public class Solution {    public int missingNumber(int[] nums) {        int sub_length = nums.length;        int origin_length = sub_length + 1;                int sub_xor_result = 0;        int origin_xor_result = 0;                for(int i = 0;i < origin_length;i++)            origin_xor_result = origin_xor_result ^ i;                for(int i = 0;i < sub_length; i++)            sub_xor_result = sub_xor_result ^ nums[i];        return origin_xor_result ^ sub_xor_result;    }}



参考:

1.http://www.jianshu.com/p/b14ca0d7ad86