a^3 + b^3 + c^3 = d^3 ? 从2-SUM 3-SUM 4-SUM 说过去。

这篇博客探讨了从2-SUM到4-SUM问题的拓展,并深入到立方和的等式a^3 + b^3 + c^3 = d^3,通过算法导论中的2-SUM问题引入,介绍了如何使用排序和二分查找来解决这些问题。文章还提出了更大胆的想法,如a^2 + b^2 + c^2 + d^2 + e^2 = abcde,并强调在整个讨论中不考虑负数的情况。
摘要由CSDN通过智能技术生成

算法导论 第三版 2.3-7

前一阵,看了不少2-SUM 3-SUM 之类的问题,然后回头偶然发现,其实《算法导论》第三版 2.3-7就是著名的2-SUM问题啊。好吧,蓦然回首它却在灯火阑珊处。

我们将在本文看到,如何

从 2-SUM问题 拓展到3-SUM 拓展到4-SUM 问题,之后拓展到a^3 + b^3 + c^3 = d^3这种诡异的等式。最后我们将去看一个更加2b的问题。

我们下面都不考虑负数的情况!!!

2-SUM

2-sum问题大概就是,给你一堆数,然后问里面有没有两个数的和是一个给定的数。

比如,给你[1,7, 5, 8, 11, 15, 12], 问里面有没有两个数的和是 8,结果自然是有了,,但如果问里面有没有两个数是10,结果自然是没有。

2-sum问题比较简单,直接排序

变成[1,5,7,8,11,12,15],然后,比如目标和是 8,那么固定一个数是1,就去找里面有没有一个数是7,1+7 = 8,如果有7,那么就成功,如果不行,就固定,5,然后再去找3。

等等,找的时候可以用2分查找,比较简单,时间复杂度就是 logn,然后n个数,nlogn,然后排序也是nlogn,总的时间复杂度就是 nlogn

可以优雅一点,不用那么多次2分查找。如果里面有一对数的和是22 , 那么肯定有一个大于等于11大,另一个小于等于11。 然后,我们先用二分查找固定11,

假定,较大的数和较小的数都是11,当然本题不行,

那么就然较大的数取12,然后12+11>22偏大

,那么就让较小的数调整到11的左边,8,然后8+12<22, 

然后就让较大的数调整到15,然后15+8 >23,

那么就再让小的数往左边走,这样,8的左边是7,7+15 = 22满足了。

虽然时间复杂度仍然是nlogn,但会优雅一点。也为下面的3-sum提供了优化思路。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值