力扣题库刷题笔记15-三数之和

1、题目如下:

2、个人Python代码实现:

        以上图为例,第一次实现未考虑数组nums存在重复元素,导致输出的数组里面的元素数组可能存在排序后相同的元素。于是做了去重:

        由上图第8行代码可知,数组set以后无法使用下标,而且先把nums数组去重本身就是错误的思路,应该是满足三数之和等于零时,将符合的数组进行去重:

        这里能发现,当数组元素足够多,也是会超时的,这里需要进行算法优化。

        以上代码算是照抄大佬的,个人理解后作以下注释:

        首先题目求三数之和,可以转换为将数组升序排序后,选定一个值nums[i]和2个指针(nums[L]、nums[R])求和等于0。当三数之和小于0时,意味着左指针(nums[L])值过小,需要将左指针右移;当三数之和大于0时,意味着右指针(nums[R])过大,需要将右指针左移。这里存在一个难点,就是如果当前选定的值,与他前后相邻的元素相同,则返回的数组中可能存在重复的数组。

        按照个人理解,去除大佬做的去重处理,再加入数组res时判断是否存在该元素(第17行代码),实现代码如下:

         可以看到因为加了一次判断,内存资源消耗没有差距,但是执行耗时大幅上升。

3、个人Java代码实现,由于代码提示List不能作为一个Type,不确定是否本地JDK版本过低,还是其他原因,本题暂时不使用Java,如果使用,实际上与Python实现方式基本一致。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值