三数之和题目描述:

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,
使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。答案中不允许包含重复的三元组。
示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:
[[-1, 0, 1],[-1, -1, 2]
]

思路:

1. 首先将数组排序,可以利用Python内置函数,也可以利用另外定义排序算法。2. 应用双指针算法。固定第一个数,索引为i,遍历整个数组,第一个数也是三个数中最小的数,然后在该数右面设置左右两个指针l和r,l=i+1,r=len(nums)-1,3. 判断这三个索引指向的元素和与0的大小关系。和>0,右指针左移一位;和<0,左指针右移一位。由于要避免重复的三元组,所以移动左右指针的时候要跳过相邻的所有相等的nums[i]。

Python3代码:

#导入计算时间的包,调用系统时间
from time import *
#初始时间
t1 = time()def threeSum(nums):nums.sort()n = len(nums)res = []for i in range(n):'''如果相邻的两个数相等,跳过,避免重复'''if i > 0 and nums[i] == nums[i-1]:continue l, r = i+1, n-1while l < r:if nums[i] + nums[l] + nums[r]>0:r -= 1while nums[r+1] == nums[r]:r -= 1elif nums[i] + nums[l] + nums[r]<0:l += 1while nums[l-1] == nums[l]:l += 1    else:res.append([nums[i],nums[l],nums[r]])l += 1r -= 1while nums[l] == nums[l - 1]: l += 1while nums[r] == nums[r + 1]: r -= 1return resif __name__ == '__main__':nums = [-1,0,1,2,-1,-4]print(threeSum(nums))
#结束时间
t2 = time()
#运行时间
run_time = t2 - t1
print(run_time)

运行结果:

[[-1, -1, 2], [-1, 0, 1]]
#运行时间
0.0010113716125488281

以上代码有一些思想错误:

遗漏了如果三个数全部大于0,则退出循环,因为没有满足条件的结果。
没有严格判断每一次的l<r的条件。

修正后的代码:

from time import * t1 = time()def threeSum(nums):nums.sort()n = len(nums)res = []for i in range(n-2):if nums[i] > 0:break'''如果相邻的两个数相等,跳过,避免重复'''if i > 0 and nums[i] == nums[i-1]:continue l, r = i+1, n-1while l < r:if nums[i] + nums[l] + nums[r]>0:r -= 1while l < r and nums[r-1] == nums[r]:r -= 1elif nums[i] + nums[l] + nums[r]<0:l += 1while l < r and nums[l] == nums[l-1]:l += 1    else:res.append([nums[i],nums[l],nums[r]])l += 1r -= 1while l < r and nums[l] == nums[l - 1]: l += 1while l < r and nums[r] == nums[r + 1]: r -= 1return resif __name__ == '__main__':nums = [-2,-3,0,0,-2]print(threeSum(nums))t2 = time()run_time = t2 - t1
print(run_time)

结果:

[]
#时间
0.0

Python三数之和相关推荐

  1. python 三数之和

    三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组.注意:答案中不可以包含 ...

  2. leetcode -python 三数之和原创

    这是一种最容易想到的方法 import numpy as np #a=np.random.randint(100,size=10) a=[26, 69, 65, 99, 71, 51, 49, 54, ...

  3. Leetcode python《热题 HOT 100》15. 三数之和

    Leetcode python 之 <热题 HOT 100>:https://leetcode-cn.com/problemset/hot-100/ 15. 三数之和 给定一个包含 n 个 ...

  4. python【力扣LeetCode算法题库】16- 最接近的三数之和

    最接近的三数之和 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答 ...

  5. 最接近的三数之和Python解法

    给你一个长度为 n 的整数数组 nums 和 一个目标值 target.请你从 nums 中选出三个整数,使它们的和与 target 最接近. 返回这三个数的和. 假定每组输入只存在恰好一个解. 来源 ...

  6. python计算列表中最接近的三数之和

    题目描述 给定一个包括 n 个整数的数组nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案. Le ...

  7. 【Leetcode】Python实现三数之和

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...

  8. 【leetcode】最接近的三数之和,python实现

    算法思路:跟上提的三数之和为0的题目解题思路一样,但是不同的地方在于它多包含了一个target,所以在计算的时候直接把target减掉,就是计算三数之和和0的距离了,所以是绝对值. 那在这里的迭代算法 ...

  9. LeetCode实战:三数之和

    题目英文 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? ...

最新文章

  1. 【OpenCV 4开发详解】轮廓外接多边形
  2. 【转】【Android】使用BaseAdapter实现复杂的ListView
  3. mysql syncbinlog_Mysql之sync-binlog参数
  4. JQuery中checkbox勾选/取消勾选的诡异问题(attr和prop)
  5. spark将rdd转为string_大数据技术之SparkCore(三)RDD依赖关系
  6. 接口测试工具postman(六)添加变量(参数化)
  7. [转载]Scikit Learn: 在python中机器学习
  8. iOS sha1加密算法
  9. 转:IOS开发之----Xcode非ARC项目中设置部分文件ARC支持
  10. Dubbo(一)之简介
  11. c++ 字符串拼接_字符串拼接新姿势:StringJoiner
  12. Java实体对象为什么一定要实现Serializable接口呢?
  13. Vue组件间常用的通信方式总结
  14. 词频统计——三国人物出场次数统计
  15. WPF and Silverlight 学习笔记(二十二):使用代码实现绑定、绑定数据的验证
  16. matlab调用C语言
  17. JPM Coin— 货币非国家化的开端 | TokenInsight
  18. cvc 降噪_此降噪非彼降噪,你要的是哪种降噪?
  19. 二分查找和三分求单峰函数极值
  20. wsyy应用程序中的服务器错误,wsYY的博客

热门文章

  1. Python活动报名表的分析、处理和筛选
  2. 深圳大学学科分析—通信工程
  3. IDEA方法上面注释模板
  4. QT判断CapsLock键以及Enter键状态
  5. 利用IPV6配置家用公网服务器
  6. nginx多域名转发
  7. 零基础学习python Day1.安装python以及pycharm
  8. vue创建项目报:Error: command failed: yarn
  9. win10电脑垃圾广告怎么删除
  10. 为什么1除以2=0余数1?余数就是它本身 1呢?