链接: link
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int ret=0;
for( auto i : nums)
{
ret^=i;
}//位运算异或运算,相同为0,不同为1,满足交换律
int t=ret==INT_MIN?ret:ret&(-ret);//-2^31未超出,但其负数超出
//找到第一个1出现的位置
//位与运算,a&-a即得到a的二进制第一个1出现位置
int g1=0,g2=0;
for(auto i:nums)
{
if(t&i)
{
g1^=i;
}
else
g2^=i;
}
vector<int> a{g1,g2};
return a;
}
};
链接: link

class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int i=0;
while(1)
{
if(i==nums.size()-1)
break;
else if(nums[i]==nums[i+1])
{
nums.erase(nums.begin()+i+1);
}
else
i++;
}
return nums.size();
}
};
链接: link
法一
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int>& numbers) {
sort(numbers.begin(),numbers.end());
return numbers[numbers.size()/2];
}
};
法二
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int cond = -1;
int cnt = 0;
for (int i=0; i<numbers.size(); ++i) {
if (cnt == 0) {
cond = numbers[i];
++cnt;
}
else {
if (cond == numbers[i]) ++cnt;
else --cnt;
}
}
cnt = 0;
for (const int k :numbers) {
if (cond == k) ++cnt;
}
if (cnt > numbers.size() / 2) return cond;
return 0;
}
};

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



