侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

【题解】【上海】【两数之和】

Allen Best
2023-08-09 / 2 评论 / 4 点赞 / 155 阅读 / 574 字
温馨提示:
本文最后更新于 2023-08-09,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

加法中,通过和减去一个加数,就得到了另外一个加数。
在程序中,我们抽取列表中的一个值(可以遍历),用和减去这个值,找到另外一个加数。如果这个加数存在(上面的函数),那么就算是找到了。

#include<bits/stdc++.h>
using namespace std;
long long  n, t, a[1000001];
int search(int x) {
	int left = 1, right = n, mid;
	while (left <= right) {
		mid = (right + left) >> 1;
		if (a[mid] < x)
			left = mid + 1;
		else if (a[mid] > x)
			right = mid - 1;
		else
			return a[mid];
	}
	return -1;	// Not found
}
int main() {
	cin.tie(0);
	cin >> n;
	for (int i = 0; i < n; ++i)
		cin >> a[i];
	cin >> t;
	for (int i = 0; i < n; ++i)
		if (search(t - a[i]) != -1 && search(t - a[i]) != a[i]) {
			cout << "Yes";
			return 0;
		}
	cout << "No";
	return 0;
}
0

评论区