Single Number
方法一:因为题目要求线性时间O(n),也就是在循环内不能再次出现循环,但是在循环外可以添加循环(这一点是我在网上看到的,根据这个思路做出来结果是Accept),可以先将数组排序,则相同的会相邻
方法二:根据异或的性质,对所有数进行异或,最后的结果即为单个数
方法一代码
class Solution
{
public:
int singleNumber(int A[], int n)
{
sort(A, A+n);
//针对n-1个偶数进行判断
for(int i = 0; i < n-2; ++i)
{
if(A[i] == A[i+1])
++i;
else
return A[i];
}
//表明最后一个数即为单数
return A[n-1];
}
};
方法二代码
class Solution {
public:
int singleNumber(int A[], int n)
{
int result = 0;
for(int i = 0; i < n; ++i)
result ^= A[i];
return result;
}
};
Single Number ||
与上面方法一类似
代码
class Solution {
public:
int singleNumber(int A[], int n)
{
sort(A, A+n);
for(int i = 0; i < n-3; ++i)
{
if(A[i] == A[i+1]&&A[i+1]==A[i+2])
i += 2;
else
return A[i];
}
return A[n-1];
}
};
本文介绍了两种有效的算法来找出数组中只出现一次的元素:一种是通过排序后遍历比较,另一种是利用异或操作的特性。这两种方法都能在O(n)的时间复杂度内解决问题。
454

被折叠的 条评论
为什么被折叠?



