和为S的两个数字
来源:互联网 发布:出售淘宝成品店铺 编辑:程序博客网 时间:2024/04/29 17:19
题目描述:
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
思路:由于看到递增排序想到二分查找,找一个数字然后二分另外一个数字。。wa了。。看了其他人的做法:
前后两个指针,如果所指元素和等于S,即可输出。。而且保证乘积最小
如果和大于S,后面那个指针减去一,如果和小于S,前面那个指针加一
代码如下:
#include <iostream>using namespace std;#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <vector>#include <map>#include <queue>#include <stack>#include <set>int s[1000005];int main(){ int n,k; int beg,end; bool tag; while(scanf("%d%d",&n,&k) != EOF){ for(int i = 0;i < n;i++){ scanf("%d",&s[i]); } beg = 0,end = n-1; tag = false; while(beg < end){ if(s[beg] + s[end] == k){ tag = true; break; }else if(s[beg] + s[end] < k){ beg++; }else{ end--; } } if(tag) printf("%d %d\n",s[beg],s[end]); else printf("-1 -1\n"); }}
0 0
- 和为S的两个数字
- 和为S的两个数字
- 找出和为S的两个数字
- 和为S的两个数字
- 【5】和为s的两个数字
- 和为S的两个数字
- 和为s的两个数字
- 和为s的两个数字
- 和为S的两个数字
- 和为S的两个数字
- 和为S的两个数字
- 和为s的两个数字
- 和为s的两个数字
- 牛客网 | 和为S的两个数字
- 和为s的两个数字
- 和为S的两个数字
- 和为S的两个数字
- 和为S的两个数字
- 准备工作-用python绘制金融数据曲线的进阶实例
- git常用命令
- 突破IIS6上传文件尺寸限制
- [DFS序列+线段树维护区间标记]ZOJ3686 A Simple Tree Problem
- Intel 的AVX2指令集解读
- 和为S的两个数字
- Windows Phone中http请求收到The remote server returned an error: NotFound.
- 从一道趣味题目学习正则表达式
- 2.给定一个图片文件名,判断字符串中是否以“png”结尾,如果是就替换成“jpg”,如果不是,就拼接”.jpg”。
- java web 查询类
- 黑马程序员--IO体系(2)
- redis环境搭建
- linux--dd指令
- 3.1.C语言和OC结合题目 // 从控制台输入用户名和密码, 然后 判断输入的用户名是否是@“Frank”, 密码 是否是 @“lanou”, 如果用户名和密码都正确,则输出登录成功