我在领扣做题——a+b

1.a+b 

1 + 3
1:0001
3:0011
4: 0100
1|3:0011=3
无进位时a|b = a +b
有进位则不成立

计算思路:使用异或运算【不进位加法】忽略有进位的位置,再加上应该有的进位的位置。
所以我们可以这样:如果我们忽略有进位的位置后,再加上应该进位的位置,就是我们的值。
1 ^ 3: 0010 =3; 忽略进位
加上进位:0010
0010 ^ 0010:0000 忽略进位
再加上进位:0100
0000^0100:0100=4

0000&0100 为-0,没有需要继续进位

直到 没有应该进位的,最后结果即为返回值。

延伸:

位运算符: 

| 按位或运算

& 按位与运算符

^ 异或运算

~取反运算

<< 左移运算符  将一个运算对象的各二进制全部进行左移若干位(左边的二进制进行丢弃,右边补0),操作数每左移一位,相当于x2

>>右移运算符    将一个运算对象的各二进制全部进行右移若干位(正数左补0,负数左补1,右边丢弃),操作数每右移一位,相当于 /2

原码 反码 补码

求一个负数的二进制: 1.该负数的正数的二进制取反,然后加1。记为这个负数的二进制。

求 -14 >>2 的值

1. -14的二进制: 14的二进制取反,加一 得到 1111 0010

2.右移2位: 1111 1100

3.1111 1100 的值为: 1111 1100 原码为 【1111 1100 先取反 1000 0011 在加 1  1000 0100】1000 0100,数值为-4

在计算机中 二进制使用 补码表示。 补码的补码即为原码

 

 

 

转载于:https://my.oschina.net/u/2870118/blog/3097602

非常抱歉,我之前理解错误了你的问题。你的题目是一个与LeetCode问题相关的问题,而不是简单的数组排序和查找问题。 对于这个问题,你可以使用类似于三数之和的方法来解决。首先,你需要对数组进行排序。然后,使用四个指针(a、b、c、d)来分别代表四个元素的位置。 接下来,使用两个循环遍历数组中的元素,其中第一个循环用于确定a和b的位置,第二个循环用于确定c和d的位置。在内部循环中,使用双指针法来查找满足条件的四元组。 以下是修改后的代码: ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> result; if (nums.size() < 4) { return result; } sort(nums.begin(), nums.end()); int n = nums.size(); for (int a = 0; a < n - 3; a++) { if (a > 0 && nums[a] == nums[a - 1]) { continue; } for (int b = a + 1; b < n - 2; b++) { if (b > a + 1 && nums[b] == nums[b - 1]) { continue; } int c = b + 1; int d = n - 1; while (c < d) { int sum = nums[a] + nums[b] + nums[c] + nums[d]; if (sum == target) { result.push_back({nums[a], nums[b], nums[c], nums[d]}); while (c < d && nums[c] == nums[c + 1]) { c++; } while (c < d && nums[d] == nums[d - 1]) { d--; } c++; d--; } else if (sum < target) { c++; } else { d--; } } } } return result; } int main() { int n, target; cin >> n >> target; vector<int> nums(n); for (int i = 0; i < n; i++) { cin >> nums[i]; } vector<vector<int>> result = fourSum(nums, target); for (int i = 0; i < result.size(); i++) { cout << "["; for (int j = 0; j < 4; j++) { cout << result[i][j]; if (j != 3) { cout << ", "; } } cout << "]" << endl; } return 0; } ``` 这段代码可以在给定的数组中找到满足条件的四元组,并按照题目要求输出结果。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值