100题_10 在排序数组中查找和为给定值的两个数字
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
仔细想想,你会发现对于排好序的数组来说,直接贪心就可以了。最初我们找到数组的第一个数字和最后一个数字。当两个数字的和大于输入的数字时,把较大的数字往前移动;当两个数字的和小于数字时,把较小的数字往后移动;当相等时,打完收工。这样扫描的顺序是从数组的两端向数组的中间扫描。这可以用反证法来证明。
代码如下:
using namespace std;
bool Find(int a[], int n, const int &sum, int &x, int &y)
{
int i = 0, j = n-1, csum;
while (i < j)
{
csum = a[i] + a[j];
if (csum == sum)
{
x = a[i];
y = a[j];
return true;
}
else if (csum < sum)
i++;
else
j--;
}
return false;
}
int main()
{
int a[] = {1, 4, 7, 11, 15};
int x, y;
if (Find(a, 5, 15, x, y))
cout<<x<<" "<<y<<endl;
return 0;
}
转载于:https://www.cnblogs.com/youwang/archive/2011/03/07/2310730.html
100题_10 在排序数组中查找和为给定值的两个数字相关推荐
- 牛客题霸 [ 未排序数组中累加和为给定值的最长子数组长度] C++题解/答案
牛客题霸 [ 未排序数组中累加和为给定值的最长子数组长度] C++题解/答案 题目描述 给定一个无序数组arr, 其中元素可正.可负.可0.给定一个整数k,求arr所有子数组中累加和为k的最长子数组长 ...
- [剑指offer]面试题第[53-1]题[JAVA][在排序数组中查找数字-1][二分法][暴力法]
[问题描述][中等] 统计一个数字在排序数组中出现的次数. 示例 1:输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2:输入: nums = [5,7, ...
- LeetCode中等题之在排序数组中查找元素的第一个和最后一个位置
题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返回 [-1, -1]. 进阶: 你可以 ...
- es6 取数组的第一个和最后一个_JS算法题之每日一题- 17.在排序数组中查找元素的第一个和最后一个位置...
微信公众号: 题 目 Q:给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置.你的算法时间复杂度必须是 O(log n) 级别.如果数组中 ...
- C#LeetCode刷题之#34-在排序数组中查找元素的第一个和最后一个位置(Find First and Last Position of Element in Sorted Array)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4970 访问. 给定一个按照升序排列的整数数组 nums,和一个目 ...
- Leetcode刷题 34.在排序数组中查找元素的第一个和最后一个位置
解法1: class Solution { public:vector<int> searchRange(vector<int>& nums, int target) ...
- [Letcode]第[34]题[JAVA][在排序数组中查找元素的第一个和最后一个位置][暴力][二分]
[问题描述][中等] [解答思路] 1. 线性扫描(不符合题意) 时间复杂度:O(N) 空间复杂度:O(1) class Solution {public int[] searchRange(int[ ...
- Leetcode每日一题:34find-first-and-last-position-of-element-in-sorted-array(排序数组中查找某元素的两端位置)
解题思路: 同样二分法先找到index 然后用两个指针指向index 一个向左一个向右遍历 直到找到值都为target的端点处 get 到一个新的运行错误:runtime error: additio ...
- LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置
前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...
最新文章
- python怎么拆分没有分隔符字符串_python如何拆分含有多种分隔符的字符串
- 运维实战案例之文件已删除但空间不释放问题解析
- 计算机虚拟内存的设置
- JS一起学03:js组成、下拉+text、字符串拼接、分号问题、数据类型、变量类型、作用域和闭包、命名、运算符、流程判断、调试、iNow、onchang
- 实战SSM_O2O商铺_46【Redis缓存】头条信息+商铺目录Service层加入缓存
- Netlink实现热拔插监控
- 删除字符串中的所有相邻重复项
- hbase1.1.1 连接集群_Hadoop2.7.1+Hbase1.1.2集群环境搭建(10) hadoop hbase kerberos
- kafka可视化客户端工具(Kafka Tool)的使用
- destroy意思中文翻译_destroy是什么意思_ destroy的翻译_音标_读音_用法_例句_爱词霸在线词典...
- 沃尔沃主动召回40万台车,只因一个罕见的问题
- 使用shell做进制转换
- php mysql 双条件排序_php – 是否有通过匹配多个条件进行排序的SQL技术?
- IDEA 快速创建 SpringBoot 项目
- 汉诺塔c 语言程序代码,汉诺塔 (C语言代码)
- 中国游戏发展史V-02
- Matlab矢量图导出PDF格式方式及LaTex图片排版技巧
- 卷积神经网络超详细介绍
- 一个很好的看电子书的软件
- Java指导书练习题——抽象类