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 <= 10^5
- 0 <= nums[i] <= 10^5
解题思路:
- 以空间换时间,重新创建一个数组
- 统计原数组中所有数字出现的频率
- 遍历新数组,查找出现次数为1次的数字
int singleNonDuplicate(int* nums, int numsSize){
int numCount[100000] = {0};//创建一个10^5大小的数组
for(int i = 0; i < numsSize; i++){
numCount[nums[i]]++;//统计原数组中数字的出现频率
}
for(int i = 0; i < numsSize; i++){
if(numCount[nums[i]] != 2){
return nums[i];//再次遍历,找到原数组中出现次数为1次的数字即可
}
}
return -1;
}