136. 只出现一次的数字
给你一个 非空 整数数组 nums
,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
思路
①逐位异或 ②排序后找只出现一次的数
复杂度
思路②的时间复杂度、空间复杂度均优于思路①
class Solution {
public:
int singleNumber(vector<int>& nums) {
//逐位异或
// int res=nums[0];
// for(int i=1;i<nums.size();i++){
// res^=nums[i];
// }
//排序后找只出现一次的数
if(nums.size()==1)return nums[0];
sort(nums.begin(),nums.end());
int num=1;
if(nums[0]!=nums[1])return nums[0];
else if(nums[nums.size()-1]!=nums[nums.size()-2])return nums[nums.size()-1];
for(int i=1;i<nums.size()-1;i++){
if(nums[i]!=nums[i-1]&&nums[i]!=nums[i+1])return nums[i];
}
return 0;
}
};
标签:nums,int,复杂度,力扣,异或,136,逐位
From: https://blog.51cto.com/u_15974747/8463585