剑指 Offer II 070. 排序数组中只出现一次的数字
给定一个只包含整数的有序数组 nums ,每个元素都会出现两次,唯有一个数只会出现一次,请找出这个唯一的数字。
示例 1:
输入: nums = [1,1,2,3,3,4,4,8,8]
输出: 2
示例 2:
输入: nums = [3,3,7,7,10,11,11]
输出: 10
方法一
异或运算
var singleNonDuplicate = function(nums) {
return nums.reduce((a, b) => a ^ b)
};
使用map结构
var singleNonDuplicate = function(nums) {
const map = new Map()
for (let item of nums) {
if (map.has(item)) {
map.set(item, map.get(item) + 1)
} else {
map.set(item, 1)
}
}
let result = 0
map.forEach((value, key) => {
if (value == 1) {
result = key
}
})
return result
};
二分查找
var singleNonDuplicate = function (nums) {
var left = 0;
var right = nums.length - 1;
while (left <= right) {
var t = (right - left) / 2;
var mid = t + left;
if (nums[mid] !== nums[mid - 1] && nums[mid] !== nums[mid + 1]) {
return nums[mid];
}
if (nums[mid] == nums[mid - 1]) {
if ((t + 1) % 2 == 0) {
left = mid + 1;
} else {
right = mid - 2;
}
} else {
if ((t + 1) % 2 == 0) {
right = mid - 1;
} else {
left = mid + 2;
}
}
}
return nums[left];
};