class Solution {
public:
int singleNonDuplicate(vector<int>& nums) {
}
};
540. 有序数组中的单一元素
给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。
请你找出并返回只出现一次的那个数。
你设计的解决方案必须满足 O(log n)
时间复杂度和 O(1)
空间复杂度。
示例 1:
输入: nums = [1,1,2,3,3,4,4,8,8] 输出: 2
示例 2:
输入: nums = [3,3,7,7,10,11,11] 输出: 10
提示:
1 <= nums.length <= 105
0 <= nums[i] <= 105
原站题解
cpp 解法, 执行用时: 0 ms, 内存消耗: 24.4 MB, 提交时间: 2024-11-10 00:28:13
class Solution { public: int singleNonDuplicate2(vector<int>& nums) { int low = 0, high = nums.size() - 1; while (low < high) { int mid = (high - low) / 2 + low; if (nums[mid] == nums[mid ^ 1]) { low = mid + 1; } else { high = mid; } } return nums[low]; } int singleNonDuplicate(vector<int>& nums) { int low = 0, high = nums.size() - 1; while (low < high) { int mid = (high - low) / 2 + low; mid -= mid & 1; if (nums[mid] == nums[mid + 1]) { low = mid + 2; } else { high = mid; } } return nums[low]; } };
golang 解法, 执行用时: 0 ms, 内存消耗: 9.2 MB, 提交时间: 2024-11-10 00:27:37
func singleNonDuplicate2(nums []int) int { low, high := 0, len(nums)-1 for low < high { mid := low + (high-low)/2 mid -= mid & 1 if nums[mid] == nums[mid+1] { low = mid + 2 } else { high = mid } } return nums[low] } func singleNonDuplicate(nums []int) int { low, high := 0, len(nums)-1 for low < high { mid := low + (high-low)/2 if nums[mid] == nums[mid^1] { low = mid + 1 } else { high = mid } } return nums[low] }
java 解法, 执行用时: 0 ms, 内存消耗: 48.9 MB, 提交时间: 2024-11-10 00:27:09
class Solution { public int singleNonDuplicate(int[] nums) { int low = 0, high = nums.length - 1; while (low < high) { int mid = (high - low) / 2 + low; if (nums[mid] == nums[mid ^ 1]) { low = mid + 1; } else { high = mid; } } return nums[low]; } public int singleNonDuplicate2(int[] nums) { int low = 0, high = nums.length - 1; while (low < high) { int mid = (high - low) / 2 + low; mid -= mid & 1; if (nums[mid] == nums[mid + 1]) { low = mid + 2; } else { high = mid; } } return nums[low]; } }
python3 解法, 执行用时: 44 ms, 内存消耗: 21.2 MB, 提交时间: 2022-11-21 11:25:44
class Solution: def singleNonDuplicate(self, nums: List[int]) -> int: low, high = 0, len(nums) - 1 while low < high: mid = (low + high) // 2 mid -= mid & 1 if nums[mid] == nums[mid + 1]: low = mid + 2 else: high = mid return nums[low]
python3 解法, 执行用时: 36 ms, 内存消耗: 21.2 MB, 提交时间: 2022-11-21 11:24:12
class Solution: def singleNonDuplicate(self, nums: List[int]) -> int: low, high = 0, len(nums) - 1 while low < high: mid = (low + high) // 2 if nums[mid] == nums[mid ^ 1]: # mid为偶数,则+1,反之-1 low = mid + 1 else: high = mid return nums[low]