LeetCode热题Hot100 - 三数之和

一刷~

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

思路:

最重要的是如何剪枝,对算法加速。

思路1:
对nums数组排序。
遍历nums[i],寻找index>i的部分中,和为-nums[i]的两个数。

可以用left、right指针搜索。
当nums[left]+nums[right]>-nums[i],right--
当nums[left]+nums[right]<-nums[i],left++
当nums[left]+nums[right]=-nums[i],输出nums[i], nums[left], nums[right],然后left++继续遍历,直至left=right

**==>提示超出时间限制**

思路2:改进:
**合理的剪枝**
遍历i和left,i和left遇到和上一次的相同值就跳过,right从n-1开始往前移动(内循环中left增大时,不需要再次便利right右侧的部分)

 第一次提交代码:

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        n = len(nums)
        nums.sort()
        res = []
        for i in range(n-2):
            target = -nums[i]
            left, right = i+1, n-1
            while left < right:
                if nums[left] + nums[right] > target:
                    right -= 1
                elif nums[left] + nums[right] < target:
                    left += 1
                else:
                    if [nums[i], nums[left], nums[right]] not in res:
                        res.append([nums[i], nums[left], nums[right]])
                    left += 1
        return res

第二次提交代码:

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        n = len(nums)
        nums.sort()
        res = []
        for i in range(n-2):
            if i > 0 and nums[i] == nums[i-1]:
                continue
            target = -nums[i]
            left, right = i+1, n-1
            for left in range(i+1, right):
                if left > i+1 and nums[left] == nums[left-1]:
                    continue
                
                while left < right and nums[left] + nums[right] > target:
                    right -= 1
                
                if left == right:
                    break
                
                if nums[left] + nums[right] == target:
                    res.append([nums[i], nums[left], nums[right]])
        return res

相关推荐

  1. LeetCodeHot100 - 之和

    2024-04-08 07:58:02       12 阅读
  2. leetcode100.之和

    2024-04-08 07:58:02       29 阅读
  3. LeetCodeHot100-两之和

    2024-04-08 07:58:02       18 阅读
  4. LeetCode-100:15. 之和

    2024-04-08 07:58:02       22 阅读
  5. leetcode100.两之和

    2024-04-08 07:58:02       29 阅读
  6. LeetCodeHot100-两相加

    2024-04-08 07:58:02       18 阅读
  7. LeetCode 100——1.两之和

    2024-04-08 07:58:02       45 阅读
  8. (Rust)LeetCode 100-两之和

    2024-04-08 07:58:02       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 07:58:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 07:58:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 07:58:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 07:58:02       18 阅读

热门阅读

  1. xss基础

    xss基础

    2024-04-08 07:58:02      13 阅读
  2. linux基础

    2024-04-08 07:58:02       14 阅读
  3. Docker【1】:Docker制作Oracle19C镜像

    2024-04-08 07:58:02       10 阅读
  4. nginx-rtmp直播监控与管理

    2024-04-08 07:58:02       14 阅读
  5. Gumbel Softmax

    2024-04-08 07:58:02       12 阅读
  6. 【恩智浦FRDM-MCX947开箱实践指南1】

    2024-04-08 07:58:02       11 阅读
  7. 迁移学习和微调

    2024-04-08 07:58:02       12 阅读
  8. Python初级笔记4 排序

    2024-04-08 07:58:02       12 阅读
  9. go | chan 并发传输或者设置chan缓存|死锁

    2024-04-08 07:58:02       14 阅读
  10. Elasticsearch 如何实现 master 选举

    2024-04-08 07:58:02       14 阅读
  11. 柒拾贰- tushare 模拟策略交易 (三)

    2024-04-08 07:58:02       13 阅读