题目:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/submissions/
代码:
class Solution { public int[] singleNumbers(int[] nums) { int t = 0; for(int i=0; i<nums.length; i++){ t ^= nums[i]; } //求最右边的1的位置 int p = 1; while((t & p) != p) p <<= 1; //将数组分为两份 int res = 0; for(int n : nums){ if((p & n) != 0){ res ^= n; } } return new int[] {res, res^t}; } }
ps:最开始使用list存储划分后的数组,效率特别低,后面意识到其实根本不用开数组,只要一个变量存结果就好。(求t最低位的1,可以用t&(-t))