已经明白题意的朋友,可以只看Java实现和Tips。
1. 中文描述:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
2. 额外说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
3. 测试用例:
Test Case 1 input: [2, 2, 1] output: 1 Test Case 2 input: [4, 1, 2, 1, 2] output: 4
4. Java实现:
1 class Solution { 2 public int singleNumber(int[] nums) { 3 int ans = nums[0]; 4 for (int i = 1; i < nums.length; i++) 5 ans ^= nums[i]; 6 return ans; 7 } 8 9 }
5. Tips:
1 异或的使用。a^a = 0;0^a = a。
2 注意到数组非空,必含有nums[0],所以令ans初值为nums[0],减少1次异或操作。