[LeetCode][Python]15:3Sum】的更多相关文章

# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 15: 3Sumhttps://oj.leetcode.com/problems/3sum/ Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0?Find all unique triplets in the array which gives the…
题目如下: Python代码: def threeSum(self, nums): res = [] nums.sort() for i in xrange(len(nums)-2): if i > 0 and nums[i] == nums[i-1]: continue l, r = i+1, len(nums)-1 while l < r: s = nums[i] + nums[l] + nums[r] if s < 0: l +=1 elif s > 0: r -= 1 el…
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 44:Wildcard Matchinghttps://oj.leetcode.com/problems/wildcard-matching/ '?' Matches any single character.'*' Matches any sequence of characters (including the empty sequence).The matching s…
Problem: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)…
题目 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c) The so…
题目来源: https://leetcode.com/problems/add-two-numbers/ 题意分析: 这道题目是要将两个单链条相加.输出得到的新链条. 题目思路: 不难发现,其实题目就是要我们模拟加法的实现.那么,我们就直接从低位(链条第一位)开始,同位相加,满10就往高位+1. 代码(python): # Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): #…
题目来源: https://leetcode.com/problems/3sum-closest/ 题意分析: 这道题目输入一个数组nums和一个数target,找出数组中三个数,使得他们的和最接近target,返回这三个数的和. 题目思路: 这道题目和上一题3Sum很像,所以也可以用类似的方法去解决这个问题.整个过程分成两步: ①数组排序:这步时间复杂度是(O(nlogn)). ②固定一个数,这步的时间复杂度是(O(n)). ③在剩下的数里面通过“夹逼定理”,找出两个数,使得三个数的和最接近t…
题目来源: https://leetcode.com/problems/3sum/ 题意分析: 这道题目是输入一个数组nums.找出所有的3个数使得这3个数之和为0.要求1.输出的3个数按小到大排序,2.3个数的组合不重复.比如输入[-1,0,1,2,-1,-4],返回的应该是[[-1,0,1],[-1,-1,2]]. 题目思路: 如果直接暴力解决,那么时间复杂度是(O(n^3)).这样会TLE. 看到这道题目,我回想了leetcode的第一题.第一题是给出一个数组和一个target,找出数组的…
题目来源: https://leetcode.com/problems/4sum/ 题意分析: 这道题目和3Sum的题目类似,找出所有的4个数,使得这4个数等于target. 题目思路: 这道题做法和3Sum的一样,先排好序.固定两个数,剩下的两个数夹逼定理找出.总的时间复杂度(O(n^3)).其中可以做一些简单的优化,比如夹逼的时候,如果最小两个数之和大于target - 前两个数,或者最大的两个数之和小于target - 前两个数直接跳出. 代码(python): class Solutio…
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:3sum, 三数之和,题解,leetcode, 力扣,Python, C++, Java 题目地址: https://leetcode.com/problems/3sum/description/ 题目描述: Given an array nums of n integers, are there elements a, b, c in nums suc…
题目来源: https://leetcode.com/problems/median-of-two-sorted-arrays/ 题意分析: 这道题目是输入两个已经排好序的数组(长度为m,n),将这两个数组整合成一个数组,输出新数组的中位数.要求时间复杂度是(log(m + n).比如如果输入[1,2,3],[3,4,5].那么得到的新数组为[1,2,3,3,4,5]得到的中位数就是3. 题目思路: 由于题目要求的时间复杂度是(log(m+n)),如果我们直接把两个数组整合一起,那么时间复杂度肯…
题目来源: https://leetcode.com/problems/regular-expression-matching/ 题意分析: 这道题目定义了两个正则表达式规则.’.’代表任意字符,’*’代表前一个字符出现任意次.输入两个字符串s,p.如果s可以被p完全匹配则返回True,否则返回False.比如’.*’可以匹配任意字符串. 题目思路: 这道题目如果直接import 正则表达式肯定是不行的,因为题目只定义了2个特殊字符,而正则表达式包括很多特殊字符,所以直接import正则表达式肯…
题目来源: https://leetcode.com/problems/min-stack/ 题意分析: 实现一个小的栈,包括初始化,push,pop,top,和getMin. 题目思路: 私用是用两个数组来处理. 代码(python): class MinStack(object): def __init__(self): """ initialize your data structure here. """ self.stack1 = []…
题目来源: https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/ 题意分析: 给定一个有重复的翻转的数组,找到最小的数. 题目思路: 由于有重复的存在,所以当中间数和两端存在相等的时候就不能用二分的方法来做了,最坏的情况是线性时间复杂度,所以直接线性查找这题也可以做. 代码(python): class Solution(object): def findMin(self, nums): ""&qu…
题目来源: https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/ 题意分析: 在一个不重复的翻转的数组里面找到最小那个.例如:4 5 6 7 0 1 2,最小是0. 题目思路: 这里可以利用二分的方法去找最小的值. 代码(python): class Solution(object): def findMin(self, nums): """ :type nums: List[int] :rty…
题目来源: https://leetcode.com/problems/maximum-product-subarray/ 题意分析: 给定一个数组,这个数组所有子数组都有一个乘积,那么返回最大的乘积. 题目思路: 由于题目输入的都是整型的,所以所有的数相差获得的是最大或者最小值.那么我们同时记录可以获得的最大和最小值,每次更新. 代码(python): class Solution(object): def maxProduct(self, nums): """ :type…
题目来源: https://leetcode.com/problems/reverse-words-in-a-string/ 题意分析: 给定一个字符串,里面包括多个单词,将这个字符串的单词翻转,例如"the sky is blue",得到"blue is sky the". 题目思路: 首先获取每个单词,将单词记录到一个数组里面,然后翻转过来就行了.要处理的是前面和后面有空格的情况. 代码(python): class Solution(object): def…
题目来源: https://leetcode.com/problems/evaluate-reverse-polish-notation/ 题意分析: 给定一个数组,用这个数组来表示加减乘除,例如 ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "…
题目来源: https://leetcode.com/problems/max-points-on-a-line/ 题意分析: 在一个2D的板上面有很多个点,判断最多有多少个点在同一条直线上. 题目思路: 这里我们可以用斜率来记录两条边是否在同一条直线.如果考虑再细一点,由于double有精度的问题,斜率最后用分数来表示. 代码(python): # Definition for a point. # class Point(object): # def __init__(self, a=0,…
题目来源: https://leetcode.com/problems/sort-list/ 题意分析: 用nlog(n)的时间复杂度实现一个链表的排序. 题目思路: 用归并排序的思想,将链表用快慢指针分成两半,然后两半排好序,最后归并. 代码(python): # Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = N…
题目来源: https://leetcode.com/problems/insertion-sort-list/ 题意分析: 用插入排序排序一个链表. 题目思路: 这题没什么好说的,直接用插入排序就行. 代码(python): # Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution…
题目来源: https://leetcode.com/problems/lru-cache/ 实现一个LRU缓存.直接上代码. 代码(python): class LRUCache(object): def __init__(self, capacity): """ :type capacity: int """ LRUCache.capacity = capacity LRUCache.length = 0 LRUCache.dict = co…
题目来源: https://leetcode.com/problems/binary-tree-postorder-traversal/ 题意分析: 后序遍历一棵树,递归的方法很简单,尝试用非递归的方法. 题目思路: 后序遍历的顺序是,先左子树,再右子树,最后才是根节点.递归的思想很简单,那么非递归的方法也是利用栈来实现,后进先出,不过这里先进的应该是左子树,那么得到的结果是根节点,右子树接着左子树.最后将结果翻转就可以了.代码给的是非递归的方法. 代码(python): # Definitio…
题目来源: https://leetcode.com/problems/binary-tree-preorder-traversal/ 题意分析: 前序遍历一棵树,递归的方法很简单.那么非递归的方法呢. 题目思路: 前序遍历的顺序是先遍历根节点,再遍历左子树,最后遍历右子树.递归的方法很直观.非递归的方法是利用栈来实现,后进先出,先放右子树进入栈.代码给的是非递归的方法. 代码(python): # Definition for a binary tree node. # class TreeN…
题目来源: https://leetcode.com/problems/reorder-list/ 题意分析: 给定一个链表L:L0→L1→…→Ln-1→Ln,改变链表的排序为: L0→Ln→L1→Ln-1→L2→Ln-2→…,要求时间复杂度为O(n),不能改变节点的值. 题目思路: 题目思路是把链表拆成两个长度相等的链表,然后将后面的链表翻转,重新连起来. 代码(python): # Definition for singly-linked list. # class ListNode(obj…
题目来源: https://leetcode.com/problems/linked-list-cycle-ii/ 题意分析: 给定一个链表,如果链表有环,返回环的起始位置,否则返回NULL.要求常量空间复杂度. 题目思路: 首先可以用快慢指针链表是否有环.假设链表头部到环起点的距离为n,环的长度为m,快指针每次走两步,慢指针每次走一步,快慢指针在走了慢指针走t步后相遇,那么相遇的位置是(t - n) % m + n=(2*t - n)%m + n,那么得到t%m = 0,所以头部和相遇的位置一…
题目来源: https://leetcode.com/problems/linked-list-cycle/ 题意分析: 给定一个链表,判断链表是否有环.要求O(1)空间时间复杂度. 题目思路: 用快慢指针可以解决这个问题.一个指针每次走两步,一个每次走一步,那么有环的等价条件是两个指针有重合.通过快慢指针还可以全环的长度. 代码(python): # Definition for singly-linked list. # class ListNode(object): # def __ini…
题目来源: https://leetcode.com/problems/word-break-ii/ 题意分析: 给定一个字符串s和一个字典dict(set),将所有将s有字典dict组成的结果输出.比如s = "catsanddog",dict = ["cat", "cats", "and", "sand", "dog"].那么结果是["cats and dog",…
题目来源: https://leetcode.com/problems/word-break/ 题意分析: 给定一个字符串s和一个字典dict,判断s是不是由字典dict里面的元素组成的. 题目思路: 这里可以用动态规划的思想.首先用一个tq[] 存储所有s[:i] 可以由dict组成的下标.如果存在s[tq[i] : j + 1] in dict,那么将j + 1加入tq,如果size在tq里面,那么返回True,否者返回False. 代码(python): class Solution(ob…
题目来源: https://leetcode.com/problems/single-number-ii/ 题意分析: 给定一个数组,数组里面每一个数字都出现了3次除了一个,找出那个数.要求时间复杂度O(n),空间复杂度O(1). 题目思路: 把所有的数转化成32位的2进制.那么如果没有只出现一次的那个数,每个位的1的个数都是3的倍数,那么我们将所有位置上的数量都对3取余数,那么剩下的就是那个数的32位组成. 代码(python): class Solution(object): def sin…