题目:
解题思路:
1.双循环
用一个标签变量记录待比较数据是否有相同的数字,循环
4 | 1 | 2 | 1 | 2 | 标签count | |
---|---|---|---|---|---|---|
循环1 循环2 | * 1 | 2 | 3 | 4 | 5 | count=0 |
循环1 循环2 | 1 | * 2 | 3 | 4 | count=1 | |
循环1 循环2 | 1 | 2 | * 3 | 4 | 5 | count=1 |
循环1 循环2 | 1 | 2 | * | count=1 | ||
循环1 循环2 | 1 | 2 | 3 | * | count=1 |
注意如果第一个数就是单元素的数循环1会循环完毕所以
C
int singleNumber(int* nums, int numsSize){
for(int i=0;i<numsSize;i++){
int count=0;
for (int j=0;j<numsSize;j++){
if(nums[i]==nums[j]){
count=count+1;
}
}
if(count==1){
return nums[i];
}
}
return nums[0];//如果第一个数就是单元素的数会循环到此处
}
时间o(n^2)
同样的代码思路使用python会超出时间限制
2.异或的性质
c++
class Solution {
public:
int singleNumber(vector<int>& nums) {
//nums
int res=0;
for(auto num:nums){
res^=num;
}
}
return res;
};
python
class Soluntion:
def singleNumber(self, nums: List[int]) -> int:
res = 0
for num in nums:
res ^= num
return res