寄托家园留学论坛

标题: 刷题咯 [打印本页]

作者: bibaboo0    时间: 2017-1-26 03:44:44     标题: 刷题咯

2月9号有个重要的面试,要开始努力刷题了!
作者: bibaboo0    时间: 2017-1-26 03:48:18

本帖最后由 bibaboo0 于 2017-1-26 04:34 编辑

今天上午刷了昨天没刷完的一道题,Leetcode 418-Sentence Screen Fitting。
本来用naive的方法做,超时。想办法优化了一下,还是超时。最后看了别人的答案,发现那个排名最高的答案看不懂,好不容易找到一个自己理解的解法,写出来,总算通过了,可是只击败了百分之九的人。。郁闷,这才medium咋就这么难呢。虽然还可以再优化一下,但是懒得管咯,看下一题吧。
参考解法:https://discuss.leetcode.com/topic/64964/python-108ms-solution/2
作者: bibaboo0    时间: 2017-1-26 04:33:06

Leetcode 281 --Zigzag Iterator
学习了python中的iterator和生成器的写法。
参考了这个回答https://discuss.leetcode.com/top ... o-1-space-solutions
作者: bibaboo0    时间: 2017-1-26 05:11:47

Leetcode 298-Binary Tree Longest Consecutive Sequence
是一个二叉树的题目。
学会了如何在python中使用stack进行dfs.
python中的list真的太好用了,直接用一个list轻松向子节点传递信息:
stack.append([child, cur_count+1])

作者: bibaboo0    时间: 2017-1-26 11:54:56

Leetcode 425. Word Squares
用dfs的方法做,一开始超时。参考别人的答案,学会了python的一种叫defaultdict的数据结构,对字符串建立前缀索引表,成功通过。击败了百分之九十二的人。
作者: bibaboo0    时间: 2017-1-26 19:27:49

本帖最后由 bibaboo0 于 2017-1-31 04:53 编辑

Leetcode 361. Bomb Enemy
参考了答案之后用了一种类似于动态规划的方法。我发现动态规划的精髓就在于用纪录的方式避免重复计算从而提高效率。另外就是学会了python的zip方法和三目运算符x if y else z
作者: bibaboo0    时间: 2017-1-26 19:52:27

Leetcode 346. Moving Average from Data Stream
学会了collections.deque的数据结构。学会用float()进行浮点数转换。
作者: bibaboo0    时间: 2017-1-26 20:29:59

本帖最后由 bibaboo0 于 2017-1-26 20:31 编辑

163. Missing Ranges
采用nums=sorted(list(set(nums)))的方式去重,非常方便

作者: bibaboo0    时间: 2017-1-26 21:08:00

394. Decode String
字符串处理一定要小心。用deque构建stack。用isalpha()和isdigit()进行字符串判断。记住调用函数一定要加括号。遇到括号匹配的问题记得用栈。
作者: bibaboo0    时间: 2017-1-27 03:09:42

66. Plus One
Easy题。学会了python的reversed操作。for i in reversed(xrange(len(digits)))
作者: bibaboo0    时间: 2017-1-27 05:01:01

317. Shortest Distance from All Buildings
这是一道hard题。用bfs的方法做,感觉复杂度挺高的。一开始超时了。后来答案的启发下,稍微剪枝了一下,就通过了,虽然只击败了36%的人。
作者: bibaboo0    时间: 2017-1-27 06:56:06

305. Number of Islands II
Hard题。自己写了一个union-find类之后就很好做了。另外就是python的这个操作:for (x,y) in [(i-1,j),(i+1,j),(i,j-1),(i,j+1)]。。。真心太方便了。
提交之后直接ac,还是蛮爽的。
作者: bibaboo0    时间: 2017-1-29 11:53:00

昨天是过年的日子,吃饭喝酒玩耍,没有刷题。今天开始恢复。
393. UTF-8 Validation 难度medium 耗时1小时
学会了python中的比特操作。byte>>(8-i)&1
作者: bibaboo0    时间: 2017-1-29 12:28:27

271. Encode and Decode Strings 难度medium 耗时0.5小时
一个简单的编码解码问题,用添加数字的方法解决。

作者: bibaboo0    时间: 2017-1-29 13:29:20

288. Unique Word Abbreviation 难度medium 耗时半小时
学会了python中牛逼的数据结构:collections.defaultdict(list)
以及list有牛逼的count()函数

作者: bibaboo0    时间: 2017-1-31 04:52:06

280. Wiggle Sort 难度medium 耗时:未计时
一开始采用先排序后交换的方法。O(nlogn)
后来看答案发现有O(n)的方法,非常好写,直接比较交换奇数项和偶数项。
python逆序遍历:range(n-1,-1,-1)
作者: bibaboo0    时间: 2017-1-31 05:30:01

259. 3Sum Smaller 难度medium 耗时50分钟
这是一个3sum的问题。看了一个关于k-sum问题的帖子http://blog.csdn.net/whuwangyi/article/details/14104589
先讲3sum中提取一个数,然后对该数后面的数做一个2sum。中间由于是smaller,不同于传统的等号2sum问题,判断条件错了好几次,最后才ac。
作者: bibaboo0    时间: 2017-1-31 05:31:08

发现一个挺不错的整理算法题的网站。
https://lefttree.gitbooks.io/lee ... um/3sumSmaller.html
作者: bibaboo0    时间: 2017-1-31 09:58:06

本帖最后由 bibaboo0 于 2017-2-1 03:00 编辑

289. Game of Life 难度medium
python黑魔法之ngbs = sum( 1 for a in xrange(max(0,i-1),min(i+1+1,m)) for b in xrange(max(0,j-1),min(j+1+1,n)) if (a!=i or b!=j) and (board[a]==1 or board[a]==3))
int整数可以代表好几bit的信息。
作者: bibaboo0    时间: 2017-2-1 04:10:20

本帖最后由 bibaboo0 于 2017-2-1 04:12 编辑

471. Encode String with Shortest Length 难度hard 耗时两小时以上
这是一道名副其实的hard题,看答案都看半天才懂。
algo:用到了递归,动态规划。python中动态规划是用dict纪录的而不是二维矩阵。
python: 学会了很多字符串处理技巧。还有list用+号拼接。还有min函数可以穿一个key函数进去比较list元素:memo= min([s,ans]+multi, key=len)
这题花了很久,也学了很多。
作者: bibaboo0    时间: 2017-2-1 07:28:57

246. Strobogrammatic Number 难度easy 耗时10分钟
easy题果然easy哈哈,直接秒了。python的dict真方便。python大法好。
作者: bibaboo0    时间: 2017-2-1 13:34:03

351. Android Unlock Patterns 难度medium 耗时2小时
花了很久刷了一道很无聊的题。。一开始思路错了,没能理解(不经过其他数字)是什么意思。
也许实际工作中遇到的题就是这么无聊吧。。

作者: bibaboo0    时间: 2017-2-2 06:22:31

465. Optimal Account Balancing 难度hard 耗时2小时
这题真刷的我要跪了。一开始用naive的方法做,结果发现错了。后来才发现应该bfs。中间有各种小问题,总是得不到正确答案,比如什么时候需要深度拷贝再遍历,什么时候需要删掉一个元素--遍历--添加回这个元素(其实就是回溯)。很多细节问题。总算ac了。
作者: bibaboo0    时间: 2017-2-3 00:44:20

406. Queue Reconstruction by Height 难度medium 耗时1小时
本来用dfs做,超时了。后来看答案发现一个特别取巧的方法。但是这个方法我临时想肯定是想不到的。。
总之学会了python的lambda function。que = sorted(people,key=lambda x: (-x[0],x[1]))
作者: bibaboo0    时间: 2017-2-3 01:19:10

345. Reverse Vowels of a String 难度easy 耗时15分钟
一开始用了很多insert操作,后来发现数组insert特别耗时,直接导致我超时。后来改成直接元素替换,ac。
作者: bibaboo0    时间: 2017-2-3 01:31:20

359. Logger Rate Limiter 难度easy 耗时15分钟
easy题不解释。
作者: bibaboo0    时间: 2017-2-3 02:20:18

401. Binary Watch 难度easy 耗时二十分钟
用到了python中的组合itertools.combinations(hour, i)
作者: bibaboo0    时间: 2017-2-5 13:22:43

389. Find the Difference Easy题 不解释
作者: bibaboo0    时间: 2017-2-5 13:40:04

276. Paint Fence
Easy题。动态规划做。
作者: bibaboo0    时间: 2017-2-6 01:03:45

400. Nth Digit
Easy题。但是暴力搜索会超时。根据结果的比特范围进行搜索。
作者: bibaboo0    时间: 2017-2-6 01:11:17

本帖最后由 bibaboo0 于 2017-2-6 01:12 编辑

293. Flip Game
Easy题不解释
python的切片操作不会索引超标。比如string只有3位,但是s[4:]也不会报错,只会返回空串。
作者: bibaboo0    时间: 2017-2-6 01:22:44

270. Closest Binary Search Tree Value
Easy题。简单的二叉搜索树搜索。
作者: bibaboo0    时间: 2017-2-6 02:08:56

20. Valid Parentheses
Easy题。用stack解决。
作者: bibaboo0    时间: 2017-2-7 12:31:15

463. Island Perimeter
Easy题。速度很慢。加速的话应该用dfs。但是既然通过就算了。
作者: bibaboo0    时间: 2017-2-7 12:43:29

415. Add Strings
Easy题。想要用字符串的join,要先建一个空串“”,然后空串.join()。
作者: bibaboo0    时间: 2017-2-8 07:09:00

409. Longest Palindrome
Easy题。但是一开始题目看错了,以为是找最长回文子串。结果写半天发现是用字符随便拼回文串。
作者: bibaboo0    时间: 2017-2-8 07:30:48

266. Palindrome Permutation
Easy题。不解释
作者: bibaboo0    时间: 2017-2-8 07:38:11

231. Power of Two
Easy题,不解释。
作者: bibaboo0    时间: 2017-2-8 11:05:07

422. Valid Word Square
Easy题,不过数据index溢出的情况考虑还是挺烦人的。
作者: bibaboo0    时间: 2017-2-8 11:30:00

408. Valid Word Abbreviation
Easy题。在处理含数字的字符串的时候,一定要考虑数字可不可能不止一位、数字能不能以0开始等等多种情况。这一题就是没考虑这两种情况,错了两次。
作者: bibaboo0    时间: 2017-2-8 11:41:05

374. Guess Number Higher or Lower
Easy题,二分搜索。
作者: bibaboo0    时间: 2017-2-8 11:49:06

326. Power of Three
Easy题。普通的做法是用recursion或者loop。看discussion发现一种聪明的做法是用:3的19次方(整数范围最大的power of 3) mod 一下这个数。如果能整除就返回true。同样的思路可以用在其他所有数的power上面。
作者: bibaboo0    时间: 2017-2-8 11:49:38

在解释题目的时候尽量用英文术语,这样学会如何用英语解释自己的思路,也是一种准备。
作者: bibaboo0    时间: 2017-2-8 11:58:56

257. Binary Tree Paths
Easy题。简单的dfs。
作者: bibaboo0    时间: 2017-2-8 14:09:12

506. Relative Ranks
Easy题。python zip()很重要。dict可以用二元tuple初始化。

作者: bibaboo0    时间: 2017-2-9 07:16:12

501. Find Mode in Binary Search Tree
Easy题。我使用dict做的,但是没想到怎么用O(1)的空间实现
作者: bibaboo0    时间: 2017-2-9 07:23:48

485. Max Consecutive Ones
Easy题,不解释。
作者: bibaboo0    时间: 2017-2-9 08:59:14

475. Heaters
Easy题,第一次击败了百分之99.88的人,也不知道为啥。用了先排序后计算的方法。Naive的方法应该是n方吧。我这样做是nlogn。
作者: bibaboo0    时间: 2017-2-9 09:19:20

448. Find All Numbers Disappeared in an Array
Easy题。看答案看到一种很聪明的做法:
for e in nums:
            nums[abs(e) - 1] = -abs(nums[abs(e) - 1])
        return [i + 1 for i, e in enumerate(nums) if e > 0]
作者: bibaboo0    时间: 2017-2-9 09:42:02

447. Number of Boomerangs
Easy题。6行python代码解决,有点小开心。至此google easy题全部结束。
作者: bibaboo0    时间: 2017-2-9 13:07:02

33. Search in Rotated Sorted Array 难度Medium 耗时半小时。
经典问题之rotated array
作者: bibaboo0    时间: 2017-2-11 14:09:17

昨天星期四,面了google intern。
前后两轮,每轮四十五分钟,从中午十二点一直到一点四十五。
第一轮听声音应该是一个白人女生,一开始问了一下项目的事,然后开始出题。给定一个字典,当你输入前几个字符时自动提醒所有可能的单词。我说有两种方式,一种是用prefix字典,另一种是用trie。prefix字典我之前写过,很有信心,但是trie我没写过,虽然我知道trie可能更好,但还是选择了用prefix字典写。写完之后follow up是如果单词有不同的频率,只想返回频率最高的五个怎么办。我一开始想的每得到一个新的就插入排序,然后返回前五个。后来她说如果数据量特别大怎么办,我这才想到可以把除了这五个之外的都抛弃掉。再后来的follow up是如果不是5个是n个,不停的插入删除还要保持最大的n个怎么办,我说可以用heap的数据结构。又问如果允许输入的prefix错一位怎么办,我说遍历搜索整个字典,找出所有跟这个prefix相差一个字符的prefix,输出union中最大的5个单词。总之她问的问题我基本上都能答上,答得好不好是另一回事。主要的问题有两个,一个是trie不熟练,她其实暗示过我可以尝试trie,我没信心就没敢接上。另一个是英语比较烂,说的结结巴巴,卡壳、重复的比较多,这个一定要训练!!
作者: bibaboo0    时间: 2017-2-11 14:18:33

第二轮运气比较好,遇到一个中国人大哥,大哥直接让我讲中文了。也不废话啰嗦,上来直接就出题。题目是给定一个list of interger,找出其中surpassers的总数。surpasser的定义是对于i,j if i < j and A[i]<A[j], then j is a surpasser of i. 也就是一个pair,后面的数index和值都比前一个大。这个题目brute force的方法很好想,就是一个二重循环,复杂度n方。大哥开始问如何优化,说最优解是nlogn。我想半天没想出来,要大哥提醒。大哥说有两种方法,一种是二叉树插入,还有一种是merge sort的变体。大哥提醒我了之后我还是没想明白,只能再次求教。后来总算明白了merge sort的方法,其实就是分治,分成left right,两边count,再count横跨两边的pair,最后把三个数加起来。知道了算法我就开始写,写的还挺快的,但是中间又出了问题:count横跨两边的pair的时候,我用了一个二层循环,这样一来就不是nlogn了,大哥让我算一下复杂度,我算出来是n方。那么怎么才能nlogn呢?我又卡壳了。在大哥提醒下,我在divide and conquer的时候,一边count 一边排序,这样上层拿到的就是一个有序list,就可以用O(n)的时间计算pair,这样复杂度就nlogn了。大哥开始问我空间复杂度的问题,我说是nlogn。最后大哥说最优的merge sort可以只用O(n)的空间。面试结束。感觉这题比上一题要更难一些,两次思路都没想到,感觉不太妙。
作者: bibaboo0    时间: 2017-2-27 15:03:45

461. Hamming Distance Easy题
python tips: 异或操作 c=x^y
作者: bibaboo0    时间: 2017-2-27 15:04:33

自从面完谷歌之后,将近二十天没刷题了,准备恢复。
作者: bibaboo0    时间: 2017-3-1 02:41:27

253. Meeting Rooms II 难度Medium
这题之前跟同学讨论过,没想出来方法。今天看了答案,理解了半天,豁然开朗。其实如果脱离了算法、编程这些,如果你就是一个房间管理员,这个其实很好解决,就是根据meeting的先后顺序,先来了就先分配房间,走了房间就空出来,没有空房间了就再开一个新的,就这么简单。如果非要说算法的话应该可以归类为贪心算法吧。
作者: bibaboo0    时间: 2017-3-1 03:43:14

127. Word Ladder 难度medium
一开始超时。后来利用字符串的字母个数限制,将一个维度的复杂度降低到常数级才通过。
for i in xrange(len(w1)):
                    for cha in 'abcdefghijklmnopqrstuvwxyz':
。。。
这个循环大概有上百次,但毕竟还是常数级。再大的常数级都比O(N)要好。这是一个真理。
作者: bibaboo0    时间: 2017-3-1 04:32:21

311. Sparse Matrix Multiplication 难度medium
稀疏矩阵的处理。
作者: bibaboo0    时间: 2017-3-1 04:42:52

28. Implement strStr()
Easy题不解释。
作者: bibaboo0    时间: 2017-3-13 06:34:19

149. Max Points on a Line
难度 hard
挺难的,写了好久。。三个小时
好久不写了,要多练啊,明天要二面tusimple
作者: bibaboo0    时间: 2017-3-13 09:02:55

133. Clone Graph
medium题。graph相关问题。用dfs做。
作者: bibaboo0    时间: 2017-3-13 12:12:30

269. Alien Dictionary
Hard题。拓扑排序。看答案之后做出来。
涉及到python的类型定义、拓扑排序、bfs等等。用了zip等黑魔法。
作者: bibaboo0    时间: 2017-3-13 13:04:06

207. Course Schedule
medium题。graph题。跟上一题差不多,拓扑排序,但是比上一题简单。拓扑排序启示就是找一个free集合然后做类似于bfs的搜索。
作者: bibaboo0    时间: 2017-3-13 13:17:58

210. Course Schedule II
medium题。是上一题的改版,用一个list记录拓扑排序的顺序就行了。
作者: bibaboo0    时间: 2017-3-14 00:38:45

329. Longest Increasing Path in a Matrix
Hard题。看了答案的思路之后轻松做出。
作者: bibaboo0    时间: 2017-4-18 07:51:51

Google match上了。感恩。
作者: bibaboo0    时间: 2017-6-5 06:14:56

530. Minimum Absolute Difference in BST
Easy题。
今天开始恢复刷题,一道easy题就刷了好久,而且仅仅击败了1%的人,好失败。看来不练还是不行啊。
一开始被python嵌套函数作用域的问题搞了好久,貌似内部函数不能修改外部函数的普通变量(list之类的可以),最后也没搞清。总结就是还是尽量通过设计参数传递的方式解决问题,不要指望着用全局变量一劳永逸。
作者: bibaboo0    时间: 2017-6-5 13:08:54

551. Student Attendance Record I
Easy题。这道题倒是做的挺快的。
作者: bibaboo0    时间: 2017-6-6 13:01:50

543. Diameter of Binary Tree
easy题。轻松ac
作者: bibaboo0    时间: 2017-6-7 12:06:50

541. Reverse String II
Easy题。
作者: bibaboo0    时间: 2017-6-7 12:32:14

581. Shortest Unsorted Continuous Subarray
Easy题。
作者: bibaboo0    时间: 2017-6-7 12:39:29

521. Longest Uncommon Subsequence I
Easy题。这道题是来逗比的吗。。

作者: bibaboo0    时间: 2017-6-7 12:45:32

520. Detect Capital
灰常easy的题。
作者: bibaboo0    时间: 2017-6-13 11:52:54

604. Design Compressed String Iterator
Medium题。感觉比较简单。




欢迎光临 寄托家园留学论坛 (https://bbs.gter.net/) Powered by Discuz! X2