PAT甲级1048 Find Coins (25 分)

在这里插入图片描述
Sample Input 1:

8 15
1 2 8 7 2 4 11 15
结尾无空行

Sample Output 1:

4 11
结尾无空行

Sample Input 2:

7 14
1 8 7 2 4 11 15
结尾无空行

Sample Output 2:

No Solution
结尾无空行

题目大意:n是硬币个数,m是需要付的钱,需要找到刚刚好能付钱的两枚硬币

这一题对时间要求很高,若是在循环中使用“打擂”的方法找着两枚硬币,会超时。。。关键还是一头一尾的双指针
用双指针找的时候,若面值小了,i++,面值大了j–,找到了就停,输出这两个i,j,以后对时间要求高的题目,尽可能直接输出,不然大概率会超时

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	int coin[100010];
	int n, m;
	int v1 = -1, v2 = -1;
	int i, j;
	cin >> n >> m;
	for (int i = 0; i < n; i++)
		cin >> coin[i];
	//先排序方便搜索
	sort(coin, coin + n, less<int>());
	i = 0, j = n-1;
	while (i<j)
	{
		if (coin[i] + coin[j] == m)
			break;
		else if (coin[i] + coin[j] < m)
			i++;
		else
			j--;
	}
	if (i>=j)
		cout << "No Solution";
	else
		cout << coin[i] << " " << coin[j] << endl;
	return 0;
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值