Stack总结
Stack性质
定义
Stack的定义便是先进后出,在python中用list实现
1 | class Stack(object): |
Basic 题目
225. Implement Stack using Queues
只用一个queue,每次append的时候,都要把前面的给pop出来再append进去
1 | class MyStack(object): |
Stack的定义便是先进后出,在python中用list实现
1 | class Stack(object): |
只用一个queue,每次append的时候,都要把前面的给pop出来再append进去
1 | class MyStack(object): |
NOTE
搬运文章,原创作者:http://joshuablog.herokuapp.com/
Just for study purpose, I don’t hold the copyright, if this is affecting anyone, please let me know.
动态规划是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。
DP问题是Leetcode中的经典问题,也是面试中经常考到的类别之一,没有通用的模版,有些DP题思考的过程也比较繁琐.所以这篇总结可能会不断更新,以便达到更好的效果
不适用场景
NOTE
搬运文章,原创作者:http://joshuablog.herokuapp.com/
Just for study purpose, I don’t hold the copyright, if this is affecting anyone, please let me know.
HR联系-> 确认电话面试时间-> 电话面试 -> 后续跟进(move on fail)
Data Engineer
NOTE
搬运文章,原创作者:http://joshuablog.herokuapp.com/
Just for study purpose, I don’t hold the copyright, if this is affecting anyone, please let me know.
Update (2019/01) 大幅更新了本文。
本文没有考虑的:滑雪系列,开飞机跳伞潜水,海钓,露营
heapq模块是python的一个标准库,它实现了一个堆数据结构,堆数据结构是一种二叉树。
官网给出的定义是: This implementation uses arrays for which heap[k] <= heap[2*k+1] and heap[k] <= heap[2*k+2] for all k, counting elements from zero.
我们可以这样理解:
堆是完全二叉树或者近似二叉树,它的各个节点的键值都有固定对应的的数字,根节点(即root,最上面起始位置)是0,若父节点为heap[k],则子节点为heap[2k+1]和heap[2k+2]。父节点对应的值总是小于或者等于子节点,称为最小堆。对应的,父节点的值总是大于或者等于子节点,称为最大堆。在heapq中,使用的是最小堆。
正因为堆的这种特殊结构,使得通过heapq模块,可以快速获取一个列表的前N个最大(小)值,即Top N。
并查集是一种树型的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(union-find algorithm)定义了两个操作用于此数据结构:
Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。
Union:将两个子集合并成同一个集合。
适合于判断,给出一组结点,判断他们是否联通。从判断是否为图(一个节点的两个边都会指向同一节点–构成三角形从而不再是树)到岛屿问题(如果节点不与其它节点联通,则会孤立成一个岛屿)
建立n个分组,每个分组代表一堆可以互相联通的结点
遍历每对结点,找到他们各自所属的分组A, B
如果A != B,则将A, B分组union起来,表示A, B分组联通了
如果A == B,则跳过 (说明A,B已经在一个组里)
NOTE
搬运文章,原创作者:http://joshuablog.herokuapp.com/
Just for study purpose, I don’t hold the copyright, if this is affecting anyone, please let me know.
这一系列题目的要求是小球滚动直到遇到障碍才停止,最后找到出口,求出valid,shorest,shortest的变种;所以用BFS可以比较简洁的解决这一系列的问题。
1 | queue = [start] |
NOTE
搬运文章,原创作者:http://joshuablog.herokuapp.com/
Just for study purpose, I don’t hold the copyright, if this is affecting anyone, please let me know.
4/35
[x] Easy
[x] Medium
[] Hard
凡是含有duplicate的都需要之前sorted,才能保证没有结果中没有重复
1 | 1-2-3 |
由于输入可能包含重复数字,所以就要保证去重。先排序然后创建Array记录访问过的数字,然后前面的一个数是否和自己相等,相等的时候则前面的数必须使用了,自己才能使用,这样就不会产生重复的排列了
1 | def backtracking(self, nums, temp, ans, used): |
终止条件不同,因为要返回每一个set,所以每次backtracking的时候都要返回tempList;然后保证唯一性就是backtrack的时候index+1
1 | def backtracking(self, nums, temp, res, start): |
因为input含有duplicate,所以在进入backtracking之前需要检查
1 | def backtracking(self, nums, temp, res, start): |
本质上是一样的,每次传的时候target-candidates[i], 然后因为每个数字可以重复使用,所以index可以保持不变
1 | def backtracking(self, candidates, target, res, temp, start): |
变化就是不可以重复利用数字,index+1
1 | def backtracking(self, candidates, target, res, temp, start): |
与上一道题的区别就是,输入为[1…9]
1 | class Solution(object): |
recursion rule 就是判断left,right的count啦,直到满足right == n
1 | def dfs(self,temp, left, right, res,n): |
这道题debug了好久,困惑于如何使得数字和字母不会在base case的时候重复导出
1 | 4 |
1 | def backtrack(res, word, pos, string, count): |