自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 leetcode之Coin Change

这题的思路其实倒是跟以前差不多,但是太容易超时了,甚至是不同的测试用例都有可能超时。看python的分布基本都是在最末尾的哪里,很多都是踩着截止线的。都是用数组来确定。代码如下:coins.sort() max = float('inf') list1 = [0] + [max] * amount for i in range(len(list1))

2016-01-28 14:51:25 614

原创 leetcode之insertion Sort list

这题要求是插入排序法。就是从无到有将每一个元素依次插入到一个排序号的linked list中。本次中将插入到中间的保留下来,当需要中间插入的时候与之比较,可以节省部分时间,试查询效率提高。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):#

2016-01-23 21:30:07 293

原创 leetcode之Merge k Sorted Lists

这题如果用merge two sorted lists的方法来做的话会十分麻烦的。这里采用的是另外一种就是将所有的sorted list里的数提取出来,排序,然后重新生成一个linked list返回。提取k个sorted list用时O(n),后面的排序用时应该很短,肯定不超O(ologn)。因为k个list都是排好序的,速度会很快。代码如下:# Definition for singly-li

2016-01-23 16:36:31 267

原创 leetcode之Reorder List

这题本身不难,但是需要注意的是将最后一个数挪到前面后,倒数第2个数的next需要置为None,否则就形成了一个环无线循环。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next

2016-01-23 15:37:15 247

原创 leetcode之Odd Even Linked List

这题一开始没有看懂题意导致浪费了好长时间。这道题是先排列奇数node,后排列偶数node。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass S

2016-01-23 12:53:25 323

原创 leetcode之House Robber II

这题相当于在有第一位的情况下不能选择最后一个。就前n-1和除了第一个之外的2个数组进行比较。代码如下:class Solution(object): def rob(self, nums): """ :type nums: List[int] :rtype: int """ if len(nums) <= 0:

2016-01-14 23:59:44 356

原创 leetcode之Product of Array Except Self

这题是不让用除法,没想到别的好方法,只能想到把2边的乘起来。。。注意不要出现多次重复乘了。代码如下:class Solution(object): def productExceptSelf(self, nums): """ :type nums: List[int] :rtype: List[int] """

2016-01-13 11:23:46 266

原创 leetcode之Convert Sorted List to Binary Search Tree

这道题的思路借鉴了将esorted array转换的思路。讲linked list转换为array。再来做。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = None

2016-01-12 12:13:50 227

原创 leetcode之Convert Sorted Array to Binary Search Tree

这题采用的做法是将中间的数作为root,而左子树又是下一个递归的根,依次递归来求解。代码如下:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# s

2016-01-12 12:11:13 232

原创 leetcode之 Lowest Common Ancestor of a Binary Tree

这题是跟Lowest Common Ancestor of a Binary Search Tree相似的思路,不过不再是直接通过比较值来判定,而是要通过看在中序排序中的位置来定。极端的情况比如单链形式的q,p只相差1的情况会非常慢。特意加上了相差1的判定。代码如下:# Definition for a binary tree node.# class TreeNode(object):#

2016-01-12 01:28:17 190

原创 leetcode之Lowest Common Ancestor of a Binary Search Tree

这题是求出2个的公共父节点。解决方法是由于这是一个BST,所以以root的值为界,很容易看是否在2边。如果在2边就返回root,不是则递归进行运算。代码如下:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x#

2016-01-11 21:17:36 222

原创 leetcode之Maximum Subarray

这题我是用的动态规划做的。简单点就是当前数字,当前最大值,当前最大值开始的过程中到当前值的中间差值为正的时候+当前值这3者的比较。代码如下:class Solution(object): def maxSubArray(self, nums): """ :type nums: List[int] :rtype: int """

2016-01-10 14:29:49 275

原创 leetcode之Remove Duplicates from Sorted List II

这题就是先求出第一个数来,用来决定头指着的位置,后面则来求中间有重复的情况。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution

2016-01-10 11:29:11 290

原创 leetcode之Reverse Linked List II

这题就是考验一个reverse linked list,不同的是前后都有元素需要维持next关系。需要记录下相应的指针信息。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.nex

2016-01-09 21:46:14 243

原创 leetcode之Partition List

本题采用的是分离了2类链表,最后合在一起的方法,需要注意的是容易产生环。需要最后处理一下。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass S

2016-01-09 20:17:54 299

原创 leetcode之Reverse Nodes in k-Group

这题跟上一个swap node一样是先算出来k个,然后依次算每k个是如何的,最后返回head。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass

2016-01-09 17:24:25 254

原创 leetcode之Swap Nodes in Pairs

这题要求是常数空间,不能修改值,只能修改node,所以直接在node上进行操作。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Soluti

2016-01-09 16:32:26 223

原创 leetcode之Rotate List

就是将倒数的几个数放到前面,再把前面的数放到后面去接起来。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object):

2016-01-09 13:57:45 230

原创 leetcode之Sort Colors

大体思路是先加一个2去末尾,然后0, 1的插入位置就会靠前。每次从头取一个数插到末尾,然后删掉开头。代码如下:class Solution(object): def sortColors(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, mo

2016-01-09 12:14:11 286

原创 leetcode之Minimum Path Sum

这题跟unique path系列是一起的,主要还是从右下角的开始,一步一步的往左上算,能做出来之前的这个就非常简单。代码如下:#m代表行,n代表列 m = len(grid) n = len(grid[0]) for i in range(m)[::-1]: for j in range(n)[::-1]:

2016-01-08 23:11:17 402

原创 leetcode之Intersection of Two Linked Lists

这道题据说是个经典题啦,可惜我这种半路出身的一开始还真是没想到。解题思路是先算出来2个列表的长度,相减就是长的多出来的部分。然后切掉,然后2边一起开始走,如果是有连接点,则一定能相遇,否则走到尾没相遇的话就返回None。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(sel

2016-01-08 15:31:13 280

原创 leetcode之Unique Paths II

这题相比于第一题就是增加了阻碍。不过我做I的时候的思路是以右下角为0,0,导致多做了好几遍无用功。反而速度不快了。可以改进下的其实。代码如下:class Solution(object): def uniquePathsWithObstacles(self, obstacleGrid): """ :type obstacleGrid: List[List[i

2016-01-08 01:25:17 246

原创 leetcode之Unique Paths

这题是应用动态规划的。选择出口作为基准点。class Solution(object): def uniquePaths(self, m, n): """ :type m: int :type n: int :rtype: int """ a = [1] * m b = [a]

2016-01-07 23:47:54 254

原创 leetcode之Merge Sorted Array

这题虽然简单,但是仔细写写也有很多的小细节注意。题目本身是将2个sorted list合并成一个sorted list。是需要排序的。然后只能直接在nums1上改。m, n并不是总长度,而是取这么长的一段出来,所以nums1需要将后面的全部去掉。代码如下:class Solution(object): def merge(self, nums1, m, nums2, n):

2016-01-07 22:24:42 223

原创 leetcode之Merge Two Sorted Lists

这题本来倒是不难,就是得搞明白是啥意思。这题是在2个已经排好序的基础上排序的其实。所以最后的结果是要有排序的。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Non

2016-01-07 11:32:29 237

原创 leetcode之Linked List Cycle II

这题在I的基础上不仅要判断,更要找出来是哪个节点开始结合。采用的方法是计算出第一次相遇的时候每次挪一步的那个一共走了x步,再算出来环的大小y。那么x - y就等于从头开始走的时候,距离结合点的距离等于相遇点的距离的那个点。然后2个点一起走,相遇的那个点就一定是结合点啦。代码如下:# Definition for singly-linked list.# class ListNode(object

2016-01-06 23:40:07 252

原创 leetcode之Linked List Cycle

如何判断是否是一个环,采用的方法的形象说明就是双人走,一个走一步,一个走2步,如果是环,就会相遇,反之,就遇不上,非环就有一个边界。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self

2016-01-06 17:19:08 239

原创 leetcode之4Sum

这题没有用到特别高的技巧,只是在3sum的基础上稍加变换。得分也只是在中间偏下。看到前面有一波密集的,应该有简单的算法的。代码如下:class Solution(object): def fourSum(self, nums, target): """ :type nums: List[int] :type target: int

2016-01-05 21:59:29 211

原创 leetcode之3Sum Closest

这题基本框架利用了3Sum,当然了没那么多的内容,稍微简化下就好了。代码如下:class Solution(object): def threeSumClosest(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int

2016-01-05 17:27:22 329

原创 leetcode之3Sum

这题考验的是two pointers,也就是从2头开始进行的那种。这题相对算简单。代码如下:if len(nums) < 3: return [] alloflist = [] nums.sort() for i in range(len(nums)): if nums[i] <= 0:

2016-01-05 16:34:32 183

原创 leetcode之Valid Sudoku

比较了上下左右各9行以及9个小矩形,应该有简单点的方法吧。算法如下:class Solution(object): def isValidSudoku(self, board): """ :type board: List[List[str]] :rtype: bool """ import re

2016-01-04 11:00:22 239

原创 letcode之Recover Binary Search Tree

这题首先是要找出来那2个数有问题。按照中序搜索排列之后,就可以找到哪2个有问题了。之后再遍历一次,将错误的数据恢复过来。代码如下:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left

2016-01-03 14:53:13 193

原创 leetcode之Flatten Binary Tree to Linked List

这题要求就是在原有的基础上修改。将原来的tree修改成按照前序遍历的格式。采用的方法是先用一个栈存起来顺序,然后依次改变。代码如下:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left

2016-01-03 11:44:23 183

原创 leetcode之Populating Next Right Pointers in Each Node II

没想到Populating Next Right Pointers in Each Node II新加的限制条件跟我的代码没冲突,所以用I的方法就可以同样解决II,我的确是没想到。。。代码如下:# Definition for binary tree with next pointer.# class TreeLinkNode(object):# def __init__(self,

2016-01-03 11:21:12 211

原创 leetcode之Populating Next Right Pointers in Each Node

这题就是在正常的广度优先搜索的栈里面加上了链表指向。比较简单的一道题。代码如下:# Definition for binary tree with next pointer.# class TreeLinkNode(object):# def __init__(self, x):# self.val = x# self.left = None#

2016-01-03 11:13:29 200

原创 leetcode之Insert Interval

这题除了沿用上次的merge interval根据返回值来判断,然后不断进行merge的方法外,还可以有通过观察插入的位置来决定覆盖。代码如下:# Definition for an interval.# class Interval(object):# def __init__(self, s=0, e=0):# self.start = s# s

2016-01-02 23:20:44 259

原创 python之Merge Intervals

这题先排序,按照start,end排序之后再开始进行运算。在一个栈里每次比较2个元素,无覆盖则大的继续比较,小的进入结果,有覆盖则继续比较。一直比较完得到答案。代码如下:# Definition for an interval.# class Interval(object):# def __init__(self, s=0, e=0):# self.start =

2016-01-02 22:23:21 710

原创 leetcode之Spiral Matrix II

这题吸收了别人做的容易理解的作法。写起来有条理多了。代码如下:class Solution(object): def generateMatrix(self, n): """ :type n: int :rtype: List[List[int]] """ if n <= 0: retu

2016-01-02 20:58:49 227

原创 leetcode之Spiral Matrix

这题解题思路还是来自递归。需要处理好一些特殊情况以适应递归。代码如下:class Solution(object): def __init__(self): self.list1 = [] def spiralOrder(self, matrix): """ :type matrix: List[List[int]]

2016-01-02 19:32:00 196

原创 leetcode之Permutation Sequence

这题的主要考点在于阶乘,排列是有序的之后,可以按照阶乘来逐步的求出每个数字。代码如下:class Solution(object): def getPermutation(self, n, k): """ :type n: int :type k: int :rtype: str """ fro

2016-01-01 21:45:16 231

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除