• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 一道算法优化题,求有序数组是否存在两数之和等于第三个给定的数字

一道算法优化题,求有序数组是否存在两数之和等于第三个给定的数字

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了爱是一道光,一道本,测孕纸一道深一道浅,一道,一道弧线等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:一道算法优化题,求有序数组是否存在两数之和等于第三个给定的数字
描述:

1.题:给出一个函数,判断在一个给定的有序数组中,是否存在两个数之和等于给定的第三个数。

这道题本身挺简单,但是如果直接使用嵌套两个 for 循环的方式去做的话,时间复杂度非常之高。

希望能有大牛给出一个简单的算法优化思路。


解决方案1:

给一个具体实现吧:


function twoSum (arr, sum) {
    var head = 0,
        len = arr.length,
        rear = len - 1,
        sort = arr[head] > arr[rear] ? "down" : "top",
        grade = {
            down: {
                sub: function () {
                    head++;
                },
                add: function () {
                    rear--;
                }
            },
            top: {
                sub: function () {
                    rear--;
                },
                add: function () {
                    head++;
                }
            }
        };
    while (head < rear) {
        if (arr[head] + arr[rear] === sum) {
            return [arr[head], arr[rear]];
        } else if (arr[head] + arr[rear] <= sum) {
            grade[sort].add();
        } else if (arr[head] + arr[rear] >= sum) {
            grade[sort].sub();
        }
    }
    return "该数组中没有满足要求的两个数字";
}    

解决方案2:

经典的two sum problem,保存双指针,分别指向数组开头和末尾,假设数组非降序排列,分情况讨论:

  1. 如果当前两个数的和等于给定值,成功。

  2. 如果当前两个数的和小于给定值,头指针右移。

  3. 如果当前两个数的和大于给定值,尾指针左移。

如果尾指针跑到了头指针左边则无解。

时间复杂度O(N)

也有其他解法,还有3 / 4 sum problem,很容易搜到。

参考:
http://stackoverflow.com/questions/11928091/linear-time-algorithm-for-2-sum
https://leetcode.com/problems/two-sum/


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 一道算法优化题,求有序数组是否存在两数之和等于第三个给定的数字

相关文章

  • 2017-06-07 Rediscluster相比Twemproxy有什么优势?
  • 2017-06-07 phpmysql数据库存储html代码,输出到浏览器时怎样正确解析,用的是啦laravel框架
  • 2017-06-07 php如何将一个数组重复的元素合并到一个新的数组?
  • 2017-06-07 关于netstat中已经建立连接的进程信息为空的问题
  • 2017-06-07 七牛云存储生成日志的时间目前要2天时间,能否缩短呢?
  • 2017-06-07 sed匹配JSON数据中的数字
  • 2017-06-07 七牛有获取某个空间下的所有文件名称列表的RESTAPI吗?
  • 2017-06-07 (python)pycharm快捷键问题
  • 2017-06-07 如何在jQueryFileUpload中获取额外的input?
  • 2017-06-07 二级缓存和三级缓存七牛云文件缓存更新

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • java要如何根据下载地址URL获取其地址中文件的MD5值代码要如何实现?
    • (python)如何kill掉后台中的tail-f
    • avos-cloud后端开发
    • 解决Mac下AndroidSDKManager联网失败的问题?
    • (python)FIFOOrderedDict的问题
    • (VFP)SetRelationTo再次请教
    • (python)django如何一个url绑定多个视图
    • (redis)python'type'objecthasnoattribute'__getitem__'
    • 申请绑定了自己的域名,为什么传的文件生成的外链还是七牛自己的二级域名?
    • 七牛分配的域名今晚突然打不开了

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有