PK创意闹新春,我正在参加「春节创意投稿大赛」,详情请看:春节创意投稿大赛
class Solution {
public int singleNonDuplicate(int[] nums) {
int result = 0;
for (int i = 0; i < nums.length; i++) {
result ^= nums[i];
}
return result;
}
}
思路1: 按位异或, 因为处了目标之外其他元素都出现了两次, 所以可以通过异或来拿到最终的值;
时间复杂度O(n) 空间复杂度O(1)
tips:0 ^ 0 = 0; 1 ^ 1 = 0; 0 ^ 1 = 1;
class Solution {
public int singleNonDuplicate(int[] nums) {
int i = 0, j = nums.length - 1;
while (i < j) {
int mid = i + ((j - i) >> 1);
if (mid % 2 == 0) {
// 偶数
if (nums[mid] == nums[mid + 1]) i = mid + 1;
else j = mid;
} else {
// 奇数
if (nums[mid] == nums[mid - 1]) i = mid + 1;
else j = mid;
}
}
return nums[i];
}
}
思路2: 二分法, 根据mid奇偶数判断相应情况 时间复杂度O(logn) 空间复杂度O(1)