leetcode016 017
来源:互联网 发布:php微信开发教程视频 编辑:程序博客网 时间:2024/06/06 15:36
leetcode016 017
给一组数求 相加的0的n组数
先排序
然后确定第一个数
第二个数和第三个数从两边往中间挪
如果三数相加大于0
因为第二个数已经是最小的了
所以把第三个数往左挪
同理 小于0 第二个数往右挪
这样复杂度是O(n方)
class Solution: # @param {integer[]} nums # @return {integer[][]} def threeSum(self,nums): nums.sort() l = len(nums) res = [] if l < 2: return res i = 0 while i < l - 2: j = i + 1 k = l - 1 while j < k: ##print i , j , k if nums[i]+nums[k]+nums[j]>0: k = k -1 elif nums[i]+nums[k]+nums[j]<0: j = j + 1 else: res.append([nums[i],nums[j],nums[k]]) while j < k and nums[j] == nums[j+1]: j = j + 1 while j < k and nums[k] == nums[k-1]: k = k -1 j = j + 1 k = k - 1 while i < l - 2 and nums[i] == nums[i+1]: i = i + 1 i = i + 1 return res
17题
求一组数中三个数相加的离目标数最近的那个和
比第一题简单 同理
def threeSum(nums , target): nums.sort() l = len(nums) res = nums[0]+nums[1]+nums[2] if l < 2: return res i = 0 while i < l - 2: j = i + 1 k = l - 1 while j < k: num =nums[i]+nums[j]+nums[k] if abs(res-target)>abs(num-target): res = num if nums[i]+nums[k]+nums[j]>target: k = k -1 elif nums[i]+nums[k]+nums[j]<target: j = j + 1 else: while j < k and nums[j] == nums[j+1]: j = j + 1 while j < k and nums[k] == nums[k-1]: k = k -1 j = j + 1 k = k - 1 while i< l - 2 and nums[i] == nums[i+1]: i = i + 1 i = i + 1 return res###print threeSum([-1,2,1,-4],1)
贵在坚持
0 0
- leetcode016 017
- 【LeetCode016-017算法/编程练习C++】3Sum Closest,九宫格输入法//Sort函数
- leetcode016 3Sum Closest
- Leetcode016--链表相邻元素进行交换
- 017
- 017
- 017
- 017-字符串
- 053-017
- tapestry 017
- L1-017
- AGC 017
- Day 017
- [017]凤梨炒饭
- 017_《参透Delphi_Kylix》
- win32 017对话框
- LeetCode 017 4Sum
- 工作周报017
- SDUT 2137 数据结构实验之求二叉树后序遍历和层次遍历
- python 安装 ghosts
- Linux-磁盘的分区、格式化、挂载
- mysqldump --flush-logs
- ssl双向认证部署+如何吊销证书
- leetcode016 017
- 连续子数组的最大和
- Android MediaPlayer使用方法简单介绍
- ibatis like 用法,各数据库的安全拼接方法
- LA3644:X-Plosives(并查集)
- Android中的Selector
- python whl 格式安装
- ABAP面试题1-关于屏幕事件
- Python 随机数抽取