点击蓝色“五分钟学算法”关注我哟

加个“星标”,天天中午 12:15,一起学算法

作者 | P.yh

来源 | 五分钟学算法

题目描述

题目来源于 LeetCode 上第 1099 号问题:小于 K 的两数之和。

给你一个整数数组 A 和一个整数 K,请在该数组中找出两个元素,使它们的和小于 K 但尽可能地接近 K返回这两个元素的和

如不存在这样的两个元素,请返回 -1

示例 1:

输入:A = [34,23,1,24,75,33,54,8], K = 60输出:58解释:34 和 24 相加得到 58,58 小于 60,满足题意。

示例 2:

输入:A = [10,20,30], K = 15输出:-1解释:我们无法找到和小于 15 的两个元素。

提示:

  1. 1 <= A.length <= 100

  2. 1 <= A[i] <= 1000

  3. 1 <= K <= 2000

题目解析

传统的 TwoSum 都是要你找到等于 target 的配对,那么如果说要找到 大于/小于 target 的配对呢?

这个时候 Hash 表的方法就很难 work 了,因为 Hash 表比较适合处理 等于 的情况 !

那么就需要考虑如何使用排序加双指针的方法来解决这个问题,这里,题目是要求小于 target 的数量,我们还是按照之前的分析思路来分析。

如果说当前左右指针指向的元素的和大于或者等于 target,那么势必我们需要向左移动右指针,让两个元素的和尽可能地小。

当前头尾指针指向的元素和小于 target 的时候,这时我们需要记录答案,虽然这道题目里面没提,如果说要记录配对数量的话,这时并不是记录一个答案,如果说当前左指针固定,除了当前的右指针指向的元素,在左指针和右指针之间的数都是满足要求的,我们只需要加上这个区间的数量即可。

当然如果数组中存在重复元素,那么我们就需要按照之前的套路遍历去重了,当然对于这道题来说,我们选择满足条件的最大值即可。

动画描述

代码实现

public int twoSumLessThanK(int[] A, int K) {    if (A == null || A.length == 0) {        return -1;    }

    Arrays.sort(A);

    int l = 0, r = A.length - 1;    int result = Integer.MIN_VALUE;

    while (l         if (A[l] + A[r] >= K) {            r--;        } else {            result = Math.max(result, A[l] + A[r]);            l++;        }    }

    return result == Integer.MIN_VALUE ? -1 : result;}

有热门推荐?

1.【程序员】全球最厉害的 14 位程序员

2.【GitHub】我在 GitHub 上看到了一个丧心病狂的开源项目!

3.【算法】动画:七分钟理解什么是KMP算法

4.【数据结构】十大经典排序算法动画与解析,看我就够了!

bigdecimal 小于等于0_图解小于 K 的两数之和相关推荐

  1. java 1099_【LeetCode(Java) - 1099】小于 K 的两数之和

    [LeetCode(Java) - 1099]小于 K 的两数之和 [LeetCode(Java) - 1099]小于 K 的两数之和 文章目录 1.题目描述 2.解题思路 3.解题代码 1.题目描述 ...

  2. LeetCode第 3 场双周赛(2019.6.29)第一题:小于 K 的两数之和

    5021. 小于 K 的两数之和 给你一个整数数组 A 和一个整数 K,请在该数组中找出两个元素,使它们的和小于 K 但尽可能地接近 K,返回这两个元素的和. 如不存在这样的两个元素,请返回 -1. ...

  3. LeetCode 1099. 小于 K 的两数之和(二分查找)

    文章目录 1. 题目 2. 解题 2.1 暴力 2.2 二分查找 1. 题目 给你一个整数数组 A 和一个整数 K,请在该数组中找出两个元素,使它们的和小于 K 但尽可能地接近 K,返回这两个元素的和 ...

  4. 两数之和、三数之和、四数之和、K数之和

    两数之和.三数之和.四数之和和K数之和是最近听室友提起的几道有意思的基础题,可以说是把双指针运用的淋漓尽致.(K数之和其实是一个动态规划的题,此处因为满足*数之和的的结构,放在一起对比提一下). 1. ...

  5. 算法动画图解:两数之和(哈希表)

    更多算法动画图解,长按此链接跳转AppStore 动画 算法动画图解:两数之和(哈希表) 思路 哈希表map用来保存一个数,另一个数在遍历nums的时候和map中的数尝试求和是否为target,如果求 ...

  6. 算法笔记-两数之和、三数之和、四数之和(LeetCode)

    两数之和 1.两数之和 题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数 ...

  7. LeetCode/LintCode 题解丨一周爆刷双指针: 两数之和

    描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...

  8. 力扣热门100题——两数之和(最全解法)

    1.两数之和 1.问题描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

  9. 【每日一算法】两数之和 IV - 输入 BST

    微信改版,加星标不迷路! 每日一算法-两数之和IV-输入BST 作者:阿广 阅读目录 1 题目 2 解析 1 题目 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目 ...

最新文章

  1. Controller 是单例还是多例?怎么保证并发的安全
  2. Android中将布局文件/View添加至窗口过程分析 ---- 从setContentView()谈起
  3. Android使用ViewPager实现左右循环滑动及轮播效果
  4. android如何导入活动,关于android:如何将活动值传递给另一个活动(Kotlin)
  5. 海量结构化数据存储技术揭秘:Tablestore存储和索引引擎详解
  6. c语言 字母赋值给变量,C++变量(变量定义和赋值)详解
  7. c扩展php 对象,PHP扩展开发之面向对象
  8. 【图论】求无向连通图的割点
  9. 计算机耗材设备管理系统,云南省审计厅计算机耗材管理系统分析与设计
  10. 计算机boot进入u盘启动,深度u盘装系统进入boot设置教程
  11. Windows10 创建Django项目
  12. matlab如何设置数值类型,matlab数据类型(数值类型)
  13. 财务数据人一定要懂的分析方法——杜邦分析法
  14. 2017年下半年阅读书单
  15. 苹果手机软件闪退怎么解决_王者荣耀筑梦祈愿闪退设备不支持怎么办 王者荣耀筑梦祈愿闪退设备不支持解决方法...
  16. sublime text3配置sublimelinter配合pep8和pyflakes检查python书写规范和语法
  17. 程序员与公务员之争,到底选啥?
  18. Java期末考试试题及参考答案(07)
  19. 如何从零开始学习人工智能
  20. 【IoT】硬件产品设计:智能硬件产品开发时间表

热门文章

  1. express项目创建
  2. 交换两个整形变量的数值
  3. php配置文件php.ini的详细解析(续)
  4. 《c专家编程》笔记--define和typedef的区别
  5. Virtural Box 虚拟ubuntu 修改分辨率
  6. JS正则表达式验证数字非常全 - 吾心无所 - 博客园
  7. Centos 配置多个虚拟IP
  8. JDK源码——利用模板方法看设计模式
  9. Arduino从DHT11读取温湿度数据并显示在1602LCD
  10. Linux安装glibc(升级版本)