
leetcode
文章平均质量分 53
kunkun_1230
所写帖子都经过自测...
展开
-
随机从长度未知的数组中抽取数字,且保证每个元素被抽到的概率相同
昨天面试字节,手写代码之后进一步考查了一道题。面试官让我说一下有什么思路。题目如下:有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V[N]里随机取出一个数,而这个数必须是符合1/N平均分布的,也就是说V[N]里面任意一个数都有1/N的机会被取出,要求空间复杂度为O(1)。我当时的思路是如果随机抽取,那么肯定要用到random方法,另外如果不能获得数组长度,那么原创 2021-02-02 14:37:28 · 1330 阅读 · 0 评论 -
leetcode动态规划问题总结
转自某位大佬的github,在这里mark一下Leetcode 题解 - 动态规划转载 2020-12-25 10:12:40 · 309 阅读 · 0 评论 -
leetcode中数组问题常用的处理方式
对于数组的处理,是leetcode中一种非常常见的题型。针对数组结构的处理,我自己整理了一些常用的解题思路,便于在面对问题时,迅速思索解题方法。1.滑窗法2.双指针3.构建左右侧双列表4.利用数据结构1.滑窗法滑窗法一般用于处理数组中多个数字之间关系。一般的结构是,一个for循环嵌套一个while循环,并结合max或者min方法进行判断。相关的题目见上述链接。2.双指针双指针方法一般有两种应用场景:一种是左右指针,即开始时定义左右指针索引。这种方式广泛应用于二分排序等操作常见原创 2020-12-23 15:19:18 · 551 阅读 · 0 评论 -
leetcode三道类似的字符串动态规划问题
参考了这篇文章,用动态规划方式求解最长公共子串长度描述有两个字符串(可能包含空格),请找出其中最长的公共连续子串,输出其长度。(长度在1000以内)例如:输入:abcde bcd输出:3回到顶部解析1、把两个字符串分别以行和列组成一个二维矩阵。2、比较二维矩阵中每个点对应行列字符中否相等,相等的话值设置为1,否则设置为0。3、通过查找出值为1的最长对角线就能找到最长公共子串。暴力求解法def getLCS(s,t): if len(s) == 0 or len(t) == 0原创 2020-11-10 10:24:47 · 341 阅读 · 0 评论 -
Python堆的基本用法
官方链接:https://docs.python.org/3/library/heapq.html堆,其实是二叉树的一种。Python中的堆其实是小根堆,即每一个父节点都小于等于它的子节点。堆这种结构在leetcode刷题过程中经常遇到。对于一个堆heap来说,它最小的元素总是它的根节点,即heap[0]。对于一个堆来说,它的导入比较简单import heapqheap = []heappush通过heappush方法可以将数字加入堆中heapq.heappush(heap,1).原创 2020-05-19 15:19:18 · 3857 阅读 · 0 评论 -
leetcode中DFS与BFS算法在数组和字符串中的应用
DFS(深度优先遍历)与BFS(广度优先遍历)算法是基于树和图结构进行遍历的两种算法。一般来说DFS在前中后遍历中运用比较明显,DFS的运用基本是要利用递归进行嵌套使用。回溯算法其实也是一种比较经典的DFS算法升级运用而BFS比较经典的运用就是层次遍历,一般会运用数组和while循环不断进行pop和insert操作。涉及到回溯算法和递归的二叉树结构题,之前已经进行过总结:leetcode回...原创 2020-05-08 10:06:19 · 776 阅读 · 0 评论 -
leetcode反转链表问题
关于反转链表的讲解可以看这篇leetcode解析反转链表的一部分class Solution(object): def reverseBetween(self, head, m, n): """ :type head: ListNode :type m: int :type n: int :rtype: L...原创 2020-04-22 11:20:02 · 318 阅读 · 0 评论 -
leetcode环形排序(cyclic sort)问题汇总
循环排序问题,一般是为了简化数组排序复杂度的一类问题。通过这种方式可以将数组排序的复杂度从o(n2)o(n^2)o(n2)降低到o(n)o(n)o(n),甚至于o(1)o(1)o(1)另外,在排序的题目中要善于运用字典和集合去重计数的性质,降低算法的复杂度。有时候还会涉及到一些位运算。268.缺失的数字这道题很简单,利用一个enumerate即可class Solution(object)...原创 2020-04-07 18:33:07 · 1692 阅读 · 0 评论 -
leetcode合并区间问题汇总
合并区间问题,采用的方法和滑窗法类似,都是在for循环中动态找到最大值和最小值。56. 合并区间逻辑相对比较简单,注意开始要对intervals进行排序。动态的对比ans[-1][-1]与interval[0]的大小来更改ans[-1][-1]class Solution: def merge(self, intervals: List[List[int]]) -> List...原创 2020-04-03 16:46:06 · 451 阅读 · 0 评论 -
leetcode快慢指针法题目汇总
双指针法,分为左右指针和快慢指针两种。其中左右指针在数组中运用较多,可以和滑窗法一起进行汇总:滑窗法运用而快慢指针一般在链表中运用较多,在反转链表和定位链表节点及链表成环等逻辑中运用比较广泛。141. 环形链表逻辑非常简单,只要是环形的链表,那么快慢指针早晚会遇到。值得注意的一点是,用try…except…来进行异常判定 def hasCycle(self, head): ...原创 2020-04-02 14:56:29 · 590 阅读 · 0 评论 -
递归算法中的小Tips
递归算法中的小Tips记忆化尾递归快速幂功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入递归的基本操作已经在二叉树的笔...原创 2020-03-19 17:22:35 · 206 阅读 · 0 评论 -
leetcode二叉树遍历与递归题目汇总
目录1.前序遍历2.中序遍历3.后序遍历4.总结规律5.层次遍历二叉树的遍历是二叉树的基本操作。对于一颗二叉树,其主要的遍历形式有四种:前序遍历、中序遍历、后序遍历、层次遍历。以一颗形状如下的二叉树为例1.前序遍历前序遍历执行的是中左右的遍历原则,即先遍历中间的根节点,然后左节点,最后右节点。这样获得的遍历顺序为:1245367前序遍历的代码利用了递...原创 2020-03-11 11:58:09 · 1108 阅读 · 0 评论 -
从买卖股票问题看状态转移方程
目录121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II123. 买卖股票的最佳时机 III188. 买卖股票的最佳时机 IV309. 最佳买卖股票时机含冷冻期714. 买卖股票的最佳时机含手续费买卖股票的问题,本质上是一个动态规划的问题。针对股票买卖这一问题,想获取某一天的最大利润,则在持有股票和卖出股票两种状态中,显然应该是卖出股票状态(即手上没有股票...原创 2020-01-20 10:46:09 · 487 阅读 · 0 评论 -
leetcode回溯算法
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解。显然,当需要枚举的时候,如果对每种情况都进行循环,那算法的复杂度要O(n^n)。因此,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯算法是一种leetcode刷题过程中出现频率比较高的题目。针对这种算法,有些大佬总结了一种套路模板如下:def func(nums): n = len(n...原创 2020-01-04 17:35:27 · 389 阅读 · 0 评论 -
并查集算法应用
并查集概念并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。并查集也被称为不相交集数据结构。顾名思义,并查集主要操作是合并与查询,它是把初始不相交的集合经过多次合并操作后合并为一个大集合,然后可以通过查询判断两个元素是否已经在同一个集合中了。在Python中,并查集可以通过list或者dict等数据结构实现5...原创 2020-01-02 20:11:47 · 510 阅读 · 0 评论 -
二分法常见应用
目录33. 搜索旋转排序数组33. 搜索旋转排序数组题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。思路:由于题目要求是logn的复杂度,所以一定要用二分法了。由于数组本来就是有序的,所以...原创 2019-12-22 23:38:49 · 1391 阅读 · 0 评论 -
leetcode中的一些骚操作
记录刷leetcode中的一些意想不到的用法14. 最长公共前缀题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。思路:这道题leetcode上的思路基本一致,复杂度O(n)。我的想法是先找到最短的字符串,然后利用集合的性质找到最长前缀。随后,我写了如下代码,用时32ms: def longestCommonPrefix(str...原创 2019-11-28 22:28:10 · 363 阅读 · 0 评论 -
leetcode滑窗法题目汇总
目录3. 无重复字符的最长子串567. 字符串的排列15. 三数之和674. 最长连续递增序列一般来说,会有一个for循环嵌套一个while循环,或者直接用while循环3. 无重复字符的最长子串题目:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。思路:简单的说就是判断当前位置字符,是否已在目前最大字符串中。在的话就去除最左侧的字符,直至当前字符不...原创 2019-11-27 22:59:10 · 1127 阅读 · 0 评论 -
python二进制的位运算符
位运算符在刷leetcode和某些极端情况下偶尔会用到。这里,我用python做一个演示,主要涉及与运算符(&),或运算符(^),进位运算符(<<)1.与运算符(&)只有当两个位数相同且都为1时才为11&1#输出为:11&0#输出为:00&0#输出为:01&2#输出为:0(因为2在二进制下为10,...原创 2019-11-24 17:30:45 · 2224 阅读 · 0 评论 -
python 手写排序算法
1.快排:时间复杂度:O(nlogn)快排的算法中其实包含了一种二分的思维在里面,因此可以用递归的方式简化def qs(L): # 终止条件必须要有 if L == []: return [] axis = L[0] less = qs([i for i in L[1:] if i < axis]) more = qs([j for j...原创 2019-10-18 10:09:10 · 738 阅读 · 0 评论 -
Python中的XOR异或符号^运用
^运算符为异或运算a = 10b = 100c = a^b # c = 110为什么会得到这样的结果呢?bin(10) #'0b1010'bin(100) #'0b1100100'其实这里面经历了几次计算:1.计算a,b的二进制值:bin(10) #'0b1010'bin(100) #'0b1100100'2.^符号的作用是将两数字相...原创 2019-04-09 17:53:34 · 91030 阅读 · 1 评论