trick

trick

一些小巧思

佩服古人的智慧!

136.只出现一次的数字

如图

巧妙利用异或的性质

解:

1
2
3
4
5
6
7
8
9
10
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = 0;
for(int c : nums){
ans ^= c;
}
return ans;
}
};

169.多数元素

如图

Boyer–Moore 投票算法

解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
int majorityElement(vector<int>& nums) {
int count = 0;
int candidate = 0;
for(int i = 0; i < nums.size(); i++){
if(count == 0){
candidate = nums[i];
}
if(nums[i] == candidate){
count++;
}else{
count--;
}
}
return candidate;
}
};

75.颜色分类

如图

用三个指针维护区间,左边全是0,右边全是2,中间扫描

扫到0放左边,扫到2放右边,i只在当前位置已确定安全时才前进

解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
void sortColors(vector<int>& nums) {
int l = 0; // 0区右边界
int r = nums.size() - 1; // 2区左边界
int i = 0; // 当前指针

while(i <= r) {
if(nums[i] == 0) {
swap(nums[i], nums[l]);
l++;
i++;
}else if(nums[i] == 1) {
i++;
}else {
// nums[i] == 2
swap(nums[i], nums[r]);
r--;
}
}
}
};

trick
https://roxy5201314.github.io/2026/01/19/trick/
作者
roxy
发布于
2026年1月19日
更新于
2026年3月2日
许可协议