首页
学习
活动
专区
工具
TVP
发布
您找到你想要的搜索结果了吗?
是的
没有找到

图解「小于 K 的两数之和 」

者 | 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 的两个元素。...那么就需要考虑如何使用排序加双指针的方法来解决这个问题,这里,题目是要求小于 target 的数量,我们还是按照之前的分析思路来分析。

1K20

滑动窗口之乘积小于k的子数组

乘积小于k的子数组 给定一个正整数数组 nums和整数 k 。 请找出该数组内乘积小于 k 的连续的子数组的个数。...这种解法同样是 刚开始左右指针指在同一个地方,然后由于乘积小于k,r可以向右移动,乘积继续变化,直到乘积大于等于k,我们就需要进行一些操作了。...我们可以想一想,只要r小于n,那当r每次增加1的时候,我们就可以计算ans,将ans+r-l+1,诶,为什么是r-l+1呢?...因为当l不变、r向右移动时,我们的乘积一直都是非递减的,如果当前右指针移动到的位置使得l到r不满足乘积小于k,那我们再继续移动右指针,乘积一定依旧不满足小于k,那就说明这个l我们已经“利用”完了,l可以退出滑动窗口了...~ 所以l的改变就取决于乘积除以要移除的nums[l]的结果,直到这个结果小于k时,l就不需要再变化了 这个时候我们就能求取当前的l到r对应的ans值了(因为已经满足乘积小于k这个条件了) /** *

69910

一天一 leet(计算右侧小于当前元素的个数)难度:困难-Day20200711

数组 counts 有该性质:counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。...没那么简单,优化下吧 二分法查找 思路 上面的循环会发现i越小循环的次数越多,而且对右边一个数的比较越多 最后一位数需要参与len-1次比较 如果能记录每一个位置的依次小于它的数,循环时我们只要知道新加入在哪两个数之间就可以之间得到它的结果...逻辑就变成了:从nums从右向左取出元素到新数组排序,并且记录每一个数的位置 实现 依次取出nums到一个新数字 新数组为排序数组 设取到nums[i],项新数组中插入时需要知道插入位置,插入位置即要求的右侧小于它的数

29320
领券