题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。

仔细想想,你会发现对于排好序的数组来说,直接贪心就可以了。最初我们找到数组的第一个数字和最后一个数字。当两个数字的和大于输入的数字时,把较大的数字往前移动;当两个数字的和小于数字时,把较小的数字往后移动;当相等时,打完收工。这样扫描的顺序是从数组的两端向数组的中间扫描。这可以用反证法来证明。

代码如下:

代码

#include <iostream>

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 在排序数组中查找和为给定值的两个数字相关推荐

  1. 牛客题霸 [ 未排序数组中累加和为给定值的最长子数组长度] C++题解/答案

    牛客题霸 [ 未排序数组中累加和为给定值的最长子数组长度] C++题解/答案 题目描述 给定一个无序数组arr, 其中元素可正.可负.可0.给定一个整数k,求arr所有子数组中累加和为k的最长子数组长 ...

  2. [剑指offer]面试题第[53-1]题[JAVA][在排序数组中查找数字-1][二分法][暴力法]

    [问题描述][中等] 统计一个数字在排序数组中出现的次数. 示例 1:输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2:输入: nums = [5,7, ...

  3. LeetCode中等题之在排序数组中查找元素的第一个和最后一个位置

    题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返回 [-1, -1]. 进阶: 你可以 ...

  4. es6 取数组的第一个和最后一个_JS算法题之每日一题- 17.在排序数组中查找元素的第一个和最后一个位置...

    微信公众号: 题 目 Q:给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置.你的算法时间复杂度必须是 O(log n) 级别.如果数组中 ...

  5. C#LeetCode刷题之#34-在排序数组中查找元素的第一个和最后一个位置(Find First and Last Position of Element in Sorted Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4970 访问. 给定一个按照升序排列的整数数组 nums,和一个目 ...

  6. Leetcode刷题 34.在排序数组中查找元素的第一个和最后一个位置

    解法1: class Solution { public:vector<int> searchRange(vector<int>& nums, int target) ...

  7. [Letcode]第[34]题[JAVA][在排序数组中查找元素的第一个和最后一个位置][暴力][二分]

    [问题描述][中等] [解答思路] 1. 线性扫描(不符合题意) 时间复杂度:O(N) 空间复杂度:O(1) class Solution {public int[] searchRange(int[ ...

  8. Leetcode每日一题:34find-first-and-last-position-of-element-in-sorted-array(排序数组中查找某元素的两端位置)

    解题思路: 同样二分法先找到index 然后用两个指针指向index 一个向左一个向右遍历 直到找到值都为target的端点处 get 到一个新的运行错误:runtime error: additio ...

  9. LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置

    前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...

最新文章

  1. python怎么拆分没有分隔符字符串_python如何拆分含有多种分隔符的字符串
  2. 运维实战案例之文件已删除但空间不释放问题解析
  3. 计算机虚拟内存的设置
  4. JS一起学03:js组成、下拉+text、字符串拼接、分号问题、数据类型、变量类型、作用域和闭包、命名、运算符、流程判断、调试、iNow、onchang
  5. 实战SSM_O2O商铺_46【Redis缓存】头条信息+商铺目录Service层加入缓存
  6. Netlink实现热拔插监控
  7. 删除字符串中的所有相邻重复项
  8. hbase1.1.1 连接集群_Hadoop2.7.1+Hbase1.1.2集群环境搭建(10) hadoop hbase kerberos
  9. kafka可视化客户端工具(Kafka Tool)的使用
  10. destroy意思中文翻译_destroy是什么意思_ destroy的翻译_音标_读音_用法_例句_爱词霸在线词典...
  11. 沃尔沃主动召回40万台车,只因一个罕见的问题
  12. 使用shell做进制转换
  13. php mysql 双条件排序_php – 是否有通过匹配多个条件进行排序的SQL技术?
  14. IDEA 快速创建 SpringBoot 项目
  15. 汉诺塔c 语言程序代码,汉诺塔 (C语言代码)
  16. 中国游戏发展史V-02
  17. Matlab矢量图导出PDF格式方式及LaTex图片排版技巧
  18. 卷积神经网络超详细介绍
  19. 一个很好的看电子书的软件
  20. Java指导书练习题——抽象类

热门文章

  1. python中time模块常用功能
  2. ADB命令行控制界面开关
  3. VINS紧耦合优化公式及代码解析
  4. OpenCV_图像平滑
  5. 网站预加载进度条的实现
  6. 【编程之美】2.12快速寻找满足条件的两个数
  7. Android中AIDL的使用详解
  8. Visual Assist使用详细说明
  9. Binder相关面试总结(五):为什么Activity间传递对象需要序列化
  10. [置顶] Android输入输出机制之来龙去脉之前生后世