- 博客(164)
- 收藏
- 关注
原创 leetcode之Fizz Buzz
这题本身是很简单的。就是从1到n这n个数中,凡是能被3整除的返回fizz,能被5整除的返回buzz,2个都能的返回fizzbuzz。class Solution(object): def fizzBuzz(self, n): """ :type n: int :rtype: List[str] """ list1
2016-12-11 02:26:40
631
原创 leetcode之Rotate Function
本题讲的是讲一个列表从末尾的数字开始翻转,然后一次求出相应的结果。一开始很容易想到的最简单的做法就是把列表列出来,然后用功能一次求一遍,然后就发现超时了。 要想解决这个超时的问题,就要仔细的观察它的规律,找到相应的规律才好解决问题。通过仔细观察发现,每一次的变化,就是把最后的一个数字给挪到最前面。而在计算里面,则是除了最后一个元素外,所有的其他元素都是之前的多算了一遍。找到了这个规律之后,剩下的就
2016-12-10 18:43:25
467
原创 leetcode之Find the Difference
这题是找出2个字符串不同的部分,只是多了一个字母。注意顺序有可能会错乱。使用collections包里面的Counter模块轻松搞定。from collections import Counterclass Solution(object): def findTheDifference(self, s, t): """ :type s: str
2016-08-30 00:13:15
627
原创 leetcode之First Unique Character in a String
恩,这题的难度分类是easy,的确也是这个难度。这题要求找出第一个非重复的字母的位置。我采用的方法是建立了一个dict,key是字母,而value是位置index。如果get(key)没有查到的话,说明这是一个新的字母,我们就把它和它的位置放入dict中,如果能查到说明要重复,则标记一下,将value改为-1,代表这个字母重复了。最后查values里面第一个非负的值就好class Solution(
2016-08-27 21:03:13
662
原创 leetcode之 Kth Smallest Element in a Sorted Matrix
这题是典型的运用堆和2分的题目。首先建立一个k大小的堆,然后用2分查找的方法每次向堆里面插入一个数据,将最后一个数据pop出去,一直保持堆的大小为k,这样的话就ok了,最后返回堆的最后一个数据。所用时间为nlogk。 但是仔细观察发现,如果A点被发现比堆里最后一个元素大,那么图中小正方形里的数据肯定都比堆的最后一个数据大,所以就不用比较了,要比较的是大的正方形减去小正方形的部分。class Sol
2016-08-16 01:42:04
540
原创 leetcode之Shuffle an Array
这题有了random模块的shuffle函数是非常简单的。只不过shuffle是直接改变list,需要先用一个中间的list进行替换,否则就改动了init里面的list。import randomclass Solution(object): def __init__(self, nums): """ :type nums: List[int]
2016-08-14 14:44:35
780
原创 leetcode之Insert Delete GetRandom O(1) - Duplicates allowed
还是用的list来解决。import randomclass RandomizedCollection(object): def __init__(self): """ Initialize your data structure here. """ self.list1 = [] def insert(self, val
2016-08-14 14:06:35
344
原创 leetcode之 Insert Delete GetRandom O(1)
这题也没什么说的,各种增删用list就可以解决了,最后用random.choice从list中随机取一个返回import randomclass RandomizedSet(object): def __init__(self): """ Initialize your data structure here. """ self
2016-08-14 13:42:07
353
原创 leetcode之Linked List Random Node
这题本身来讲是比较简单的。把所有的值放进一个list里,想取哪个取哪个。import random# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solu
2016-08-14 13:26:50
372
原创 leetcode之Random Note
几天没做,先做道简单的哈。这题就是将第一个string分解,如果第2个string没有相应的字母,或者字母的数量少于第一个,就说明不匹配。用python的collections包来解决。from collections import Counterclass Solution(object): def canConstruct(self, ransomNote, magazine):
2016-08-14 01:20:03
1289
原创 以京东为例简单的写下抓取动态数据
不管是使用beautifulsoup还是scrapy的过程中,都会发现明明网页的源代码里有的数据,但是就是抓取不出来,原因呢就是因为这个数据是由js生成的动态数据。 要抓取这个动态数据一般来说是有2种方法。一种是直接找到js的数据源,那样就会得到一个xml或者是json的数据,后续处理一下就可以了。另外一种就是浏览器直接执行完js,然后再去抓取得到的数据。 比较下2种方法的优缺点。速度上
2016-07-29 23:14:49
3274
原创 leetcode之Find K Pairs with Smallest Sums
这题的目的是求出前k个最小和的list,这题的解法是先凑出来一个k大小的堆,然后排序,然后将后面的依次填入到堆中,排序,将最大的踢出堆,这样堆中始终保持k个元素,一直比较到最后,就是最小的k个元素的集合。时间耗时(n-k+1)logk,也就是nlogk。class Solution(object): def Order(self, list1, last, k = 0): l
2016-07-14 12:53:39
363
原创 leetcode之Guess Number Higher or Lower
这题是很简单的二分查找的题目,用的实例是一个现实经常见到的,比如年会猜钱多少的,写起来也不是很难,只是别把题目的函数功能理解反了就好了。class Solution(object): def guessNumber(self, n): """ :type n: int :rtype: int """ def Gu
2016-07-13 23:09:58
306
原创 leetcode之Valid Perfect Square
这题是用来求一个数是不是另一个数的平方。用二分法可以轻松解决。每次看中间的数的平方与之比较,大了,则中间数为新的list的上限,反之亦然。class Solution(object): def __init__(self): self.list1 = [] def isPerfectSquare(self, num): """ :typ
2016-06-28 23:08:33
342
原创 leetcode之Dungeon Game
这应该算是2d的动态规划的第3篇了。这篇在之前的基础上变形,加强了难度。 之前的时候是直接寻找最短路径,而这题显然这样直接是不行的,中间的过程中会有损血,血必须时刻>=1,而要求解,就必须将题目变形,变成熟悉的样子。变成走到这格的时候需要有多少血量就可以了。 如果这格是负数or0,那么走到这格所需要的血量就是后面一格的血量减去本格的血量的最小值(因为有右边和下边2个,且必须保证剩下的血量足够走到
2016-06-26 01:59:56
484
原创 leetcode之Binary Tree Maximum Path Sum
这题是求出来一个树中最长的段。大部分的情况都是一个^形状的样子。也就是说你需要找出来左支的最大值+右支的最大值,再加上根就得到了答案。首先采用后序遍历的方式,依次求出每个根的值,然后比较就可以得到最终的结果。 但是这题中出现了负数,这就给题目增加了难度。子节点的值为负数的,对于父节点的值毫无帮助,应该“剪掉”,即,凡是值为负的子节点,一律不参与父节点的计算。这样依次求出所有的节点值,找到最大值即可
2016-06-25 02:10:57
446
原创 leetcode之 House Robber III
这次是强盗的第3篇。偷盗对象是颗二叉树,要求找到最大的利益。从给的例子来看,很容易就会看到最简单的动态规划算法。class Solution(object): def rob(self, root): """ :type root: TreeNode :rtype: int """ if root is None
2016-06-23 23:14:44
377
原创 leetcode之Counting Bits
这题是用来找出来一个数字化为2进制是有多少个1的,题目的提示很明显,就是要去找规律。规律其实很简单。就是2的n次方之后的都是1-2的n次方-1的值再加上1。难得写个能打败90%多的解。class Solution(object): def countBits(self, num): """ :type num: int :rtype: List
2016-06-18 01:23:13
334
原创 leetcode之Maximum Product Subarray
这还是一道动态规划的题。第n个数时,你需要比较的是这个数与前面的数依次相乘的最大值,这个最大值就是这个数位置的最大值。由于可能会出现0,所以最后的结果必然是对全部的list取最大值,这样就会得到最大的乘法子序列最大值。但是这样的问题是很明显的,算法的复杂度是n的平方。会超时。仔细想想其实对于每次要乘的数来说,最大值一定出现在原list的最大值or最小值里面,亦或者是它自己本身。(共3种情况:一个正
2016-06-17 02:07:56
351
原创 leetcode之Triangle
此题是用dp来解决从顶点到底部的最小距离问题。不要被题目的从上往下的顺序迷惑,反过来采用从下而上可能更好理解一些。从底部开始,上一层加上下一层对应的2个中的最小值可以求出到本层此点的最小值,一层层累进,最后汇聚到顶点就是从顶到底的最小距离。`class Solution(object): def minimumTotal(self, triangle): """
2016-06-16 01:35:44
372
原创 leetcode之Range Sum Query 2D - Immutable
这题是用动态规划算法来求解矩形区域内的和的问题。解题方法在于下面4张图,看懂了,自然就会了。 class NumMatrix(object): def __init__(self, matrix): """ initialize your data structure here. :type matrix: List[List[int]]
2016-06-13 23:43:52
322
原创 leetcode之Bitwise AND of Numbers Range
这题已经明确了是用位运算来解题的了。按照惯例,肯定不可能是一个一个的两两想交来得到结果。一定会有我们能利用到的信息才行。我们能利用的是什么呢?1个就是2的幂与它的减一相交等于0,0与任何数相交都等于0,第2个就是2的n次方 与2的n+1次方中间,只有有2个数相交为2的n次方,则跟其他人的都是2的n次方。import mathclass Solution(object): def range
2016-06-11 13:40:47
382
原创 使用scrapy-redis构建简单的分布式爬虫
前言scrapy是python界出名的一个爬虫框架。Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 虽然scrapy能做的事情很多,但是要做到大规模的分布式应用则捉襟见肘。有能人改变了scrapy的队列调度,将起始的网址从start_urls里分离出来,改为从redis读取,多个客户端可以同时读取同一个re
2016-06-11 03:41:31
30830
16
原创 leetcode之Integer Break
这题就是把整数拆开一系列的数字之和,使之乘积最大。从题目的提示信息来看发现了规律,就是7-10,严格来讲是8到10,因为我看7反而是个特殊情况。class Solution(object): def integerBreak(self, n): """ :type n: int :rtype: int """ i
2016-06-09 21:17:29
411
原创 leetcode之Intersection of Two Arrays II
这题跟上一题http://blog.youkuaiyun.com/howtogetout/article/details/51619443不一样的地方在于,这题要求的是尽可能大的公共部分,包含了重复数字。 老样子,使用了Counter函数来计数,去重。from collections import Counterclass Solution(object): def intersect(self,
2016-06-09 02:36:07
378
原创 leetcode之 Intersection of Two Arrays
这题比较简单,是求2个不同list的公共部分。要求是元素必须是唯一的。先将2个list去重,然后从少的list开始循环求解。class Solution(object): def intersection(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int]
2016-06-09 02:17:02
429
原创 leetcode之Top K Frequent Elements
这题是统计前K个最长使用的字母。在统计数量里面,python有一个collections库,里面的一个Counter函数就是用来干这个的。所以做起来很方便。from collections import Counterclass Solution(object): def topKFrequent(self, nums, k): """ :type nums
2016-06-09 02:08:40
323
原创 leetcode之Reverse Vowels of a String
这题是典型的双指针问题,前后各一个指针用来检测是否是元音,都是的话互相交换来解决。class Solution(object): def reverseVowels(self, s): """ :type s: str :rtype: str """ if len(s) < 2: retu
2016-06-09 01:35:58
322
原创 leetcode之Power of Three
本来想通过跟power of four一模一样的方法来解题。http://blog.youkuaiyun.com/howtogetout/article/details/51615930 但是发现了int(math.log(243, 3))等于4,而不是等于5。243的平方等都会出现类似问题。所以修改了一下。class Solution(object): def isPowerOfThree(self
2016-06-09 00:05:08
375
原创 leetcode之Power of Four
采用的思路是求对数然后求指数的方法来验证。import mathclass Solution(object): def isPowerOfFour(self, num): """ :type num: int :rtype: bool """ if num <= 0: return Fa
2016-06-09 00:01:25
404
原创 windows下Redis的安装使用
windows下Redis的安装使用摘要:Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial)
2016-05-27 23:51:18
4111
原创 leetcode之Longest Substring Without Repeating Characters
这题目前没想到更好的方法,能提高速度的方法估计是用来判断下一个字符是否存在于已知的字符里。不用in方法,而用别的特殊方法,比如将小写字母,大写字母,数字,特殊字符分开来判断?代码如下:class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str
2016-03-20 18:23:01
338
原创 leetcode之jump game II
一开始跟jump game一样的思路,结果发现O(n2)的算法超时了。这时发现已经肯定了有一个答案。则可以考虑从正面开始数的方法。一开始返回的是列表,结果也超时了。现在改成了返回位置。这次就ok了。class Solution(object): def location(self, l, nums): if nums[l] >= len(nums) - 1 - l:
2016-03-20 15:19:27
349
原创 leetcode之Jump Game
这题一开始用的是正向的递归,结果显而易见的内存超了,都怪python没有尾递归优化,渣渣。只能改循环了。采用的是倒过来数,这次内存占用就不超了。代码如下:if nums == []: return False if nums[0] >= len(nums) - 1: return True m = len(nums
2016-03-18 18:34:42
299
原创 leetcode之Best Time to Buy and Sell Stock II
这题的标签写啥dp啊,真是给醉了,就是把前后差值为正的找出来,加起来就好了。代码如下;class Solution(object): def maxProfit(self, prices): """ :type prices: List[int] :rtype: int """ if len(prices) <
2016-02-03 23:14:29
320
原创 leetcode之Best Time to Buy and Sell Stock
这题要求的是最多只完成一次交易,所以就回到了最大子数组和的问题上了。将所有的升降列出来,然后1次交易求出最大值。借鉴了别人写的屌屌的代码。代码如下:class Solution(object): def maxProfit(self, prices): """ :type prices: List[int] :rtype: int
2016-02-03 22:58:44
279
原创 leetcode之Serialize and Deserialize Binary Tree
这题主要还是运用了广度搜索优先的方法。一层一层的遍历来获得每层的数据。然后依次安装上去。代码如下:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None#
2016-02-02 00:08:12
360
原创 leetcode之Sort List
这题主要考察将linked list中的所有数形成一个list之后,将list进行排序的过程。可以用快排等来进行。我懒。。。直接拿现成的用了。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x#
2016-02-01 22:05:33
280
原创 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
635
原创 leetcode之insertion Sort list
这题要求是插入排序法。就是从无到有将每一个元素依次插入到一个排序号的linked list中。本次中将插入到中间的保留下来,当需要中间插入的时候与之比较,可以节省部分时间,试查询效率提高。代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):#
2016-01-23 21:30:07
316
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人