
LeetCode
GhostintheCode
来自大山深处的一名IT小学生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Python leetcode 152. Maximum Product Subarray
class Solution(object): def maxProduct(self, nums): """ :type nums: List[int] :rtype: int """ maxval = float('-inf') imax = 1 imin = 1 for i in range(len(nums)): if nums[i]<.原创 2020-05-20 11:19:39 · 349 阅读 · 0 评论 -
Python Leetcode 155. Min Stack
Python Leetcode 155. Min Stackclass MinStack(object): def __init__(self): """ initialize your data structure here. """ self.stack = [] self.minstack = [] def push(self, x): """ :type x: i原创 2020-05-12 16:06:28 · 276 阅读 · 0 评论 -
Python Leetcode 50. Pow(x, n)
Python Leetcode 50. Pow(x, n)# 递归class Solution(object): def myPow(self, x, n): """ :type x: float :type n: int :rtype: float """ def quickmul(N): if N ==0: return 1.0原创 2020-05-12 15:40:09 · 373 阅读 · 0 评论 -
Python LeetCode 69. Sqrt(x) 二分法和牛顿迭代法
Python LeetCode 69. Sqrt(x) 二分法和牛顿迭代法二分法class Solution(object): def mySqrt(self, x): """ :type x: int :rtype: int """ l, r, result = 0, x, -1 while l <= r: mid = (l + r) // 2原创 2020-05-11 15:44:10 · 499 阅读 · 0 评论 -
Python Leetcode 221. Maximal Square 动态规划问题
Python Leetcode 221. Maximal Square 动态规划问题这种题目肯定要用动态规划,像这种矩阵类型的,那么接下来就是找递推公式。对于动态规划我也没有什么好的方法,就多做一点题吧,就有感觉了。Doneclass Solution(object): def maximalSquare(self, matrix): """ :type matrix: List[List[str]] :rtype: int原创 2020-05-09 09:32:29 · 299 阅读 · 0 评论 -
python 最近公共祖先在二叉树中和在二叉搜索树中 LeetCode No.236 No.235
思路:通过递归的思路写这道题就非常容易,想象一下某一个状态,p,q 分别在root的两边,那代表什么?是不是代表,p,q是在root点分开的。那我们就找到了这个点。那再想象一下,如果p,q都在同一边,那我们就去找边找,比如,p,q都在左子树,那么我们就把根节点左子树传下去,右边同理。# Definition for a binary tree node.# class TreeNode(ob...原创 2019-08-08 12:39:58 · 224 阅读 · 0 评论 -
python 二叉树前序,中序,后序遍历 LeetCode No.144, No.94,No.145
这题和98基本上是一模一样,所以写98题之后,顺便写了97题,刚好想用一行写完,就有了下面的写法。大家以后写的时候可以多试试,有很大的成就感,而且为枯燥的刷题生活,增添一点乐趣。今天暂时先写个中序遍历吧,等过几天在写个前序和中序,还有ass要做,哭ing。# Definition for a binary tree node.# class TreeNode(object):# d...原创 2019-08-05 14:45:08 · 257 阅读 · 0 评论 -
python验证二叉搜索树 LeetCode NO.98
知识点:首先要明白什么是二叉搜索树,二叉树相信大家都明白,具有搜索功能的二叉树有什么特点呢?简单来说就是,一个树的左子树的所有元素,一定比根节点小,那么右子树的所有元素,一定比根节点大。另外一个性质就是,一个正确的二叉搜索树的中序(前序,中序,后序,不知道的可以复习一下),一定是一个递增序列。那么就有两种方法了,一个是递归,一个就是中序输出,判断前一个是不是比后一个要小。#第一种写法就是,把所...原创 2019-08-05 14:26:21 · 347 阅读 · 0 评论 -
python 有效的字母异位词 Leetcode No.242
class Solution(object): def isAnagram(self, s, t): """ :type s: str :type t: str :rtype: bool """ return sorted(s) == sorted(t)原创 2019-08-05 13:09:33 · 379 阅读 · 0 评论 -
Python pow(x,n) Leetcode NO.50 分而治之
Python pow(x,n) Leetcode NO.50 分而治之class Solution(object): def myPow(self, x, n): """ :type x: float :type n: int :rtype: float """ if n == 0: ...原创 2019-08-31 09:23:51 · 266 阅读 · 0 评论 -
python 求众数 LeetCode N0.169
python 求众数 LeetCode N0.169class Solution(object): def majorityElement(self, nums): """ :type nums: List[int] :rtype: int """ count = 0 candidate = ...原创 2019-08-31 13:26:07 · 335 阅读 · 0 评论 -
python 买卖股票的最佳时机 LeetCode No.122
python 买卖股票的最佳时机 LeetCode No.122解法:一、暴力解法二、贪心算法:由于不限制买卖次数,也没有交易费用,就可以是用贪心算法。思路:只要第二天比前一天高,我们就买进,第二天卖掉,就可以赚钱。三、动态规划:根据算法导论这本最权威的书(最难读的一本书)中提到动态规划的四个步骤,第一刻画一个最优解的结构特征,第二递归地定义最优解的值,第三计算最优解的值,通常采用自低向...原创 2019-08-31 14:09:26 · 386 阅读 · 0 评论 -
python BFS和DFS LeetCode NO.102
python BFS和DFS LeetCodeBFS主要用队列来实现,DFS主要用栈来实现#BFS模版def BFS(graph,start,end): visited,quene = set(),[start] visited.add(start) while queue: node =quenue.pop() visited.add(node) process(node...原创 2019-08-31 16:56:36 · 456 阅读 · 0 评论 -
python 最大深度最小深度 LeetCode 104,111
python 最大深度最小深度 LeetCode 104,111解法:1、BFS:寻找最大深度的时候,很容易想到就是,可以直接进行层次遍历,当无法在进行遍历下去的时候就是最深的深度;当寻找最小深度的时候,对每一个节点检查它是否是叶子节点,也就是检查它是否有左子树和右子树。2、DFS:每次进行遍历的时候,要判断是否是叶子节点,更新max深度的值和min深度的值。BFS版本# Defi...原创 2019-09-02 16:42:17 · 314 阅读 · 0 评论 -
Python 生成括号 LeetCode 22
解法:1、n代表的是左括号和右括号的个数,最后生成的字符串的长度为2n,首先想到的就是枚举的方法,假设有2n的数组,每一个格子都有两种情况,填做括号还是右括号。2、很明显上面的方法是不符合常理的,因为做括号和右括号都是有限制,当n为3的时候,不会出现((((((的情况,所以当我们进行递归的时候,就需要进行判断,当左括号用完的时候就要停止,称为剪枝。3、动态规划解法,当看到有和没有,放和不放的...原创 2019-09-03 14:28:46 · 433 阅读 · 0 评论 -
Python 三个数之和 LeetCode No.15
知识点:主要考察的是哈希表的运用。大概思路就是,固定a,c两个数字,那么b就等于-a-c,通过建立一个哈希表,记性查找,这样的就可以从暴力算法的n立方的复杂度,到n平方的复杂度。class Solution(object): def threeSum(self, nums): """ :type nums: List[int] :rtyp...原创 2019-08-05 12:45:08 · 282 阅读 · 0 评论 -
Python 返回数据流中的第k大元素 LeetCode NO.703
Python 返回数据流中的第k大元素 LeetCode NO.703思路:在理解这个题目的时候,首先大家要理解,heap的概念,也就是堆是什么(在这里简单的说下,一般而言我们说的堆都是树的结构,分为最大堆和最小堆,也就是堆顶的元素是是最大值还是最小值区分的。但是不只是树来实现的,还有二项式堆,斐波拉契堆,大家可以维基百科一下,各种操作的时间复杂度)。并且一般的高级语言中,都会实现heap...原创 2019-07-22 17:10:11 · 554 阅读 · 0 评论 -
Python最长回文子串
Python最长回文子串变体返回str中最长回文子串的长度给定一个字符串str,想通过添加字符的方式使得str整体都变成回文字符串,但要求只能在str的末尾添加字符,请返回在str后面添加的最短字符串要求解决原问题和变体问题的时间复杂度为O(N)思路写的很好的博客:Manacher’s Algorithm 马拉车算法全套解法个人见解看了上面的博客,第一个Manache...原创 2018-12-04 19:25:05 · 3110 阅读 · 0 评论 -
Python寻找两个有序数组的中位数
Python寻找两个有序数组的中位数审题:找出意味着这是一个查找算法题算法复杂度log级别,就是提示你是二分查找二分查找实现一般为递归(1)递归包括递归体(2)终止条件思路:定理:有序数组中有一半的元素小于等于数组的中位数,有一半的元素大于等于中位数(如果数组中元素个数是奇数,那么这里的一半并不是严格意义的1/2)如果我们去掉其中一个数组比中位数小的k个数,再去掉另一个...原创 2018-12-03 20:15:04 · 2495 阅读 · 0 评论 -
python 两数之和
两数之和 python实现解法1不用说耗时长,复杂度O(n2)O(n^2)O(n2)class Solution: def twoSum(self, nums, target): &quot;&quot;&quot; :type nums: List[int] :type target: int :rtype: List[int] ...原创 2018-12-03 09:47:22 · 811 阅读 · 0 评论 -
Python最长公共子串
Python最长公共子串方法一最简单最容易想到的方法,去数组第一个元素为最长公共前缀,如果是,就return,如果不是就减去最后一个单词。只到找到位置。class Solution: def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str ...原创 2018-12-10 17:52:39 · 3280 阅读 · 0 评论 -
Python 小易的字典
编程题思路可以用动态规划的思想解决这样的题目,把一个大的问题拆分为两个小问题来解决。这里只有两个不一样的字母。那么字典中的字符串肯定是a开头的和z开头的。并且我们已知有多少个a和多少个z,就能求出他们有多少种排列组合(设为x)。那么这个适合会出现两种情况,如果k大于x,那么输出-1,如果k小于x,那么就看剩下的两种情况,1. 如果第一个字母是a的话,那么以a为首字母的字符串的排列组合是由n-...原创 2019-07-08 11:09:34 · 329 阅读 · 0 评论 -
Python 反转链表-reverse linked list Leetcode No.206
反转链表-reverse linked list假设存在链表 1 → 2 → 3 → Ø,我们想要把它改成 Ø ← 1 ← 2 ← 3。在遍历列表时,将当前节点的 next 指针改为指向前一个元素。由于节点没有引用其上一个节点,因此必须事先存储其前一个元素。在更改引用之前,还需要另一个指针来存储下一个节点。不要忘记在最后返回新的头引用!#非递归的形式class Solution: ...原创 2019-07-09 16:12:09 · 579 阅读 · 0 评论 -
python 反转节点 Leetcode No.24
Swap nodes in pairs大概题意就是两两相邻节点进行反转,但是如果是给的是5个节点的话,那么最后一个节点是不变的,注意这一点。思路非常简单,但是主要考察的是代码实现能力。# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val =...原创 2019-07-10 19:06:33 · 227 阅读 · 0 评论 -
Python 链表中间是否有环 Leetcode No.141
Python 链表中间是否有环 Leetcode No.141Ps:用英语的不是为了装哈,主要是为了锻炼一下英语阅读,毕竟想往上走的话,读源码,读文档,读国外论文都是必经之路。那么英语能力必不可少,希望你们也可以想我一样。主要意思就是判断链表中是否有环。思路也很简单:一个是用set存,发现他数量不加了那不就代表有环了嘛。第二种方式非常的巧妙,用一个快指针和一个慢指针,就等于是一个龟兔赛...原创 2019-07-10 20:38:39 · 215 阅读 · 0 评论 -
Python 环形链表 Linked List Cycle II No.142
Python 环形链表 Linked List Cycle II No.142其实和第141的思路大概一样,也是分为两种,不过第二种涉及到一些数学证明,有一点tricky。这题我还有一个不明白的就是,我第一次看到这题目的时候,为什么返回值是node,而不是index,我已知理解是输出一段文字,包含它的index。(我是菜鸡,谁能留言说一下,万分感谢)#第一种方法,在141的基础上改进了一下...原创 2019-07-11 12:58:19 · 314 阅读 · 0 评论 -
Python 每K个节点一组翻转链表 Leetcode No.25
Python 每K个节点一组翻转链表 Leetcode No.25题意: 之前有一道相邻节点之间反转,现在是任意制定k个元素,进行反转。ps:给初级者的小小建议,当你看不明白我写的文字话,可能是我没写好,也可能是你每有get到我的意思,那么你就尝试变写我的代码,边分析,实在不行就手动模拟一边画图,相信自己可以的。第一种利用栈结构首先能想到的当然是通过栈的结构,来进行反转,设置一个栈,先进...原创 2019-07-11 21:07:00 · 1033 阅读 · 0 评论 -
Python 两数相加 Add Two Numbers Leetcode No.2
Python 两数相加 Leetcode No.2思路很简单,模拟小学加法运算就好了,因为是逆序的,头指针指向的那个其实就是个位,往后加就完事,但是唯一需要注意的是,最高位可能有进位。(属于代码练习题)ps:还有人说先把数全部取出来,用计算机加法算完,再建立链表连接起来,乍一看有点投机取巧好像可行的样子,但是我们要考虑计算和的时候会溢出。还有人考虑直接在原来的链表上改数字,多一位的话,就再...原创 2019-07-12 11:50:50 · 539 阅读 · 0 评论 -
Python返回滑动窗口中的最大值 LeetCode NO.239
之前博客写过一道关于大顶堆小顶堆的优先队列,Python 返回数据流中的第k大元素 LeetCode NO.703。这题也可以用这种方法很好的求解。思路:我们可以来维护k大小的大顶堆。这个堆顶的元素就是最大值。可以想到我们对堆进行就可以得最后的结果。举个栗子原创 2019-07-25 12:48:11 · 515 阅读 · 0 评论 -
python 无重复字符的最长子串 Leetcode No.3
python 无重复字符的最长子串 Leetcode No.3题意刚开始看到这个题目的是,下意识觉得会用动态规划写,动态规划有个经典题目,就是求两个字符串的公共最长子序列,感觉很像。anyway,哈哈哈哈。思路:第一种暴力解法,不说了第二种滑动窗口,先尝试选取一个合适的滑动窗口的大小,比如第一个例子中初步定下来是abc然后我们就往里面加后续的字母,比如往abc的滑动窗口中加入a,会发...原创 2019-07-22 11:14:29 · 333 阅读 · 0 评论 -
python 括号字符串匹配 LeetCode No.20
Python 括号字符串匹配 LeetCode No.20思路: 主要思路也很简单,这属于栈这种数据结构的简单题。首先我们应该把括号的左半边压入栈中,当遇到右括号的时候,通过栈的pop操作,推出栈顶元素,与之配对,匹配了,就代表当前的操作是没有问题的,不匹配那就错了呗。 当然还有一种情况,当所有右括号都被匹配的时候,栈里面还有元素,那就代表,错了呗,如果完全匹配,stack中的元素应该是空的...原创 2019-07-22 11:16:56 · 1290 阅读 · 0 评论 -
Python字符串转换整数 (atoi)
题目:实现 atoi,将字符串转为整数。提示:仔细考虑所有输入情况。如果你想挑战自己,请不要看下面并自己考虑所有可能的输入情况。说明:这题解释的比较模糊(即没有指定输入格式)。你得事先汇集所有的输入情况。atoi的要求:这个函数需要丢弃之前的空白字符,直到找到第一个非空白字符。之后从这个字符开始,选取一个可选的正号或负号后面跟随尽可能多的数字,并将其解释为数字的值。字符串可以在形成...原创 2020-01-06 13:36:42 · 7245 阅读 · 0 评论