LeetCode
Hey1213
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
189. 旋转数组
题目:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。说明:要求用空间复杂度为O(1)的原地算法我的想法,先延长数组,再切断……但提交以后突然发现,这也不是O(1)的 空间复杂度class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do...原创 2019-11-04 22:21:33 · 174 阅读 · 0 评论 -
172. 阶乘后的零
题目:给定一个整数 n,返回 n! 结果尾数中零的数量。题解:官方题解是不断除以5,知道n=0我的想法略有不同,但也差不多:class Solution: def trailingZeroes(self, n: int) -> int: x = 5 ans = 0 while n >= x: an...原创 2019-10-31 14:13:35 · 174 阅读 · 0 评论 -
171. Excel表列序号
题目:给定一个Excel表格中的列名称,返回其相应的列序号。一个不断加和乘的过程class Solution: def titleToNumber(self, s: str) -> int: if len(s) == 0: return 0 dic = {} for i in range(1, 27): ...原创 2019-10-31 13:56:17 · 219 阅读 · 0 评论 -
169. 求众数
题目:给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。我自己是用的字典,写这题是因为看到LeetCode的题解,觉得很巧妙:① 排序class Solution: def majorityElement(self, nums: List[int]) -> int: ...原创 2019-10-31 13:32:15 · 152 阅读 · 0 评论 -
166. 分数到小数
题目:给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/fraction-to-recurring-decimal思路:其实这题不难,记得高中好像做过,就是要考虑的细节非常多:...原创 2019-10-31 13:10:35 · 246 阅读 · 0 评论 -
162. 寻找峰值
题目:峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。说明:你的解法应该是 O(logN) 时间复杂度的。思路:用二分即可#!/usr/bin/env python3...原创 2019-10-30 22:53:15 · 228 阅读 · 0 评论 -
155. 最小栈
题目:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。思路:本题的重点在于如何在常数时间检索到栈里的最小元素用另一个栈min_stack记录来记录截止当前的最小值,如果新加进来的元素小于等于min_sta...原创 2019-10-30 22:22:11 · 145 阅读 · 0 评论 -
152. 乘积最大子序列
题目:给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)思路:这题最开始想的是用动态规划来解,但由于正负数的情况不同,定义了positive和negative两个DP数组。非常非常简单粗暴的思路和各种判断:import sysclass Solution: def maxProduct(self, nums: List[int]) -&g...原创 2019-10-30 21:37:26 · 153 阅读 · 0 评论 -
151. 翻转字符串里的单词
题目:给定一个字符串,逐个翻转字符串中的每个单词。要求删除多余空格。class Solution: def reverseWords(self, s: str) -> str: if len(s) == 0: return "" ss = s.split(" ") res = "" for ...原创 2019-10-30 20:55:51 · 143 阅读 · 0 评论 -
148. 排序链表
题目:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。本题的重点在于,时间复杂度和空间复杂度的限制题解:链表的优势在于可以通过修改引用来更改节点顺序,无需开辟额外空间,而已循环交换。题解采用了归并排序的方法,通过不断二分排序再合并的方法,实现了O(nlogn)的时间复杂度和O(1)的空间复杂度下图来自LeetCode网站题解:链接:https://leetc...原创 2019-10-30 20:52:21 · 222 阅读 · 0 评论 -
146. LRU缓存机制
题目:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少...原创 2019-10-30 15:23:28 · 181 阅读 · 0 评论 -
141. 环形链表
题目:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。个人理解:不是很懂这道题,给了pos却没有用到…难道不是只需要判断一下pos是否-1吗,然而默认代码模板的输入却没有pos……代码:#!/usr/bin/env python3.6# _*_coding...原创 2019-10-29 22:30:03 · 136 阅读 · 0 评论 -
140. 单词拆分 II
题目:上一题139的加强版给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。我的实现方法是依旧是记忆化回溯,相比上一题加上了句子分割后的拼接。#!/usr/bin/env python3.6# _*_coding:utf-8 _*_# @Time : 2019/...原创 2019-10-29 22:14:21 · 147 阅读 · 0 评论 -
139. 单词拆分
题目:给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。这题我一开始用暴力的回溯解法,因为忘记记录已搜索过的拆分点,导致在极端数据下会超时,时间复杂度会到O(n^n),如下:因此,改用题解中的第一种解法记忆化回溯,也就是用一个列表记录...原创 2019-10-29 21:08:55 · 160 阅读 · 0 评论 -
138. 复制带随机指针的链表
题目:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。思路:对于本题,主要是先拷贝一个不复制random的链表,同时用一个字典记录每一个节点的拷贝地址,然后再通过key-value设置拷贝链表的random指针。#!/usr/bin/env python3.6# _*_coding:utf-8 _*_# @Time ...原创 2019-10-27 22:51:35 · 136 阅读 · 0 评论 -
136. 只出现一次的数字
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?本以为三分钟就能做完的题,但是要求不适用额外空间。这是我写的解法:#!/usr/bin/env python3.6# _*_coding:utf-8 _*_# @Time : 2019/10/26 17...原创 2019-10-26 17:35:52 · 314 阅读 · 0 评论 -
134. 加油站
题目:在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元...原创 2019-10-25 22:44:41 · 157 阅读 · 0 评论 -
131. 分割回文串
题目:给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。一开始的思路跟题解第二种方法很像:记录出每个区间是否回文+DFS但是在实现的时候有一个细节没想好: for i in range(n): for j in range(0, i+1): if i == j: p[j][i] = True continu...原创 2019-10-25 13:29:41 · 186 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
一个有序数组,转化为高度平衡的二叉搜索树每个节点的左右两个子树的高度差的绝对值不超过 1# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right...原创 2019-08-22 22:38:46 · 121 阅读 · 0 评论 -
116. 填充每个节点的下一个右侧节点指针
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。初始情况所有next节点都为null,现在将每层的点加上next指针,如上图分析思路:因为给定的树为完美二叉树,所以如果一个点不是叶子节点,就必有左节点和右节点**结论1:**一个节点如果左节点不为空,则左节点的next必为右节点因为所有叶子节点都在同一层,因此如果父节点有next节点,且该节点必有next节点*...原创 2019-08-22 22:48:40 · 119 阅读 · 0 评论 -
101. 对称二叉树
题目描述说,最好是能用递归或迭代做其实二叉树镜面对称,可以划分为其左子树与右子树对称而后,比较两棵树是否对称时,相当于比较:① A子树的左子树与B子树的右子树是否对称② A子树的右子树与B子树的左子树是否对称同时成立则说明两棵树对称分析到这里,解题就比较简单了# Definition for a binary tree node.# class TreeNode:# de...原创 2019-08-19 20:31:27 · 135 阅读 · 0 评论 -
123. 买卖股票的最佳时机 III
本题相当于T121和T122的进阶版相比于前两次的只有一次交易和不限交易次数,本题仅限小于等于两次交易虽然有前两题做铺垫,但我还是没有思路自己想的是一些暴力方法,复杂度基本都是O(n^2)左右看了一下题解,有点像动态规划,基本上都是以下思路:设定四个变量:fst_buy第一次买入可以获得的最大利润fst_sell第一次卖出可以获得的最大利润sec_buy第二次买入可以获得的最大利润...原创 2019-04-05 15:18:06 · 401 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树
如题,根据前序与中序遍历序列构造二叉树整体思路:① 前序遍历的第一个元素,必然是二叉树的根节点② 在中序遍历中找到前序遍历第一个元素的位置③ 该位置左边的所有点都是二叉树的左子树元素,该位置右边的所有点都是二叉树的右子树元素思路一:递归+字典由整体思路可以构建子函数用于递归,不断求子树的左右子树,直到叶子节点。代码如下:# Definition for a binary tree ...原创 2019-08-22 22:35:44 · 173 阅读 · 0 评论 -
125. 验证回文串
与普通的验证回文串不用的是,只验证字母和数字。class Solution: def isPalindrome(self, s: str) -> bool: i = 0 j = len(s) - 1 s = s.lower() while i < j: if s[i].isalnum() and s[j].isalnum(): if s[i] != s...原创 2019-08-23 15:53:10 · 153 阅读 · 0 评论 -
744. 寻找比目标字母大的最小字母
用二分法即可:from typing import Listclass Solution: def nextGreatestLetter(self, letters: List[str], target: str) -> str: if target < letters[0] or target >= letters[-1]: return letters[0]...原创 2019-08-23 15:49:55 · 187 阅读 · 0 评论 -
873. 最长的斐波那契子序列的长度
本题主要是求一串数组成的序列中,最长的斐波那契子序列的长度思路:个人理解,斐波那契数列的精髓在于你知道某两个数,就可以一直往前/往后推出整个数列的所有数,所以我们可以设任意两个数为该斐波那契子序列的最后两个数(作为一个状态),然后写出动态转移方程:ans[i][j] = ans[j][k] + 1(若ans[j][k] = 0,则改成+3)可能是我多年封印的动态规划突然开窍了…O(∩_∩)O...原创 2019-04-09 13:31:16 · 447 阅读 · 0 评论 -
203. 移除链表元素
随机pick的一道简单题移除链表中的特定元素我自己提交的代码:# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def removeElem...原创 2019-04-08 17:51:46 · 172 阅读 · 0 评论 -
890. 查找和替换模式
本题主要是解决在一串单词中,找出字母符合对应排列的单词的集合其实不是很难,但自己一开始自己想复杂了第一次提交的代码class Solution: def findAndReplacePattern(self, words: List[str], pattern: str) -> List[str]: if pattern == "": return words # 先求...原创 2019-04-08 16:08:42 · 878 阅读 · 0 评论 -
628. 三个数的最大乘积
题目:给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。可以说是很傻很傻很傻了!!!这道题我做了一天!!!先是想用堆排序做!!!然后发现正负有很多种情况不知道怎么判断!!!越来越暴躁 越来越乱!!!其实最开始应该先列出各种情况,然后分析一下就会知道最大乘积的情况只有两种:min1min2max1, max1max2max3按照这个思路就很简单了╮(╯▽╰)╭f...原创 2019-04-10 18:12:50 · 151 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
本题题意主要是,在一只股票的N天价格中,通过不限次数的交易,求得最大利润。相当于T121的简单进阶版我最开始的思路是:初始买入日为第一天,利润和设置为0如果今天比买入那天股价高,则考虑明天的股价1.1 如果明天的股价更高,则不卖1.2 如果明天的股价不更高,则卖,总利润 += (今天价格-买入那天的价格),然后把买入价格设置为明天如果今天比买入那天低,则把买入日设置为今天如果今天...原创 2019-04-04 21:14:43 · 163 阅读 · 0 评论 -
121. 买卖股票的最佳时机
本题主要是是求序列中两个数字的最大差,其中第一个数必须在第二个数前面O(n)就可以解决问题class Solution: def maxProfit(self, prices: List[int]) -> int: max_profit = 0 min_index = 0 for i in range(len(prices)): if prices[i] - pric...原创 2019-04-04 20:06:14 · 146 阅读 · 0 评论 -
851. 喧闹和富有
题目主要是先通过richer条件,求每个 person x,所有拥有的钱不少于 person x 的人的集合随后,要求求出每个 person x对应的集合中,安静值最小的人转化思路:将richer条件转化为一个有向图,在python可以通过字典 graph = defaultdict(list) 来存储然后由于每个点的answer,一定包含在每个点的安静值 或 对应集合中的点的answer...原创 2019-03-19 12:14:34 · 277 阅读 · 0 评论 -
8. 字符串转换整数 (atoi)
如果python写 可以考虑列表等数据结构正确率低主要是因为很多细节情况需要考虑这一题的是实现过程自己做得太复杂了class Solution: def myAtoi(self, str: str) -> int: if (str == ''): return 0 INT_MAX = 2147483647 INT_MIN = -2147483648 i = 0...原创 2019-03-18 17:26:32 · 135 阅读 · 0 评论 -
974. 和可被 K 整除的子数组
题目如上首先的思路是遍历查找长度分别为1、2、……n的子序列,看看是否符合条件由于n的范围是3万,所以n^2级别的方法肯定会超时随后想到的是先把每个位置上的值先模上K,得到一个方便计算且加和后不会太大的数组接下来的思路是看题解得出来的:由于要求的结果是连续子序列的和,我们可以采用一个很常规的思路,就是新建一个数组s,s[i] = sum(A[0]…A[i]),即第i位表示前i个数字的...原创 2019-07-15 20:41:56 · 793 阅读 · 0 评论 -
400. 第N个数字
思路:一位数:9 * 1 * 1两位数:9 * 10 * 2三位数:9 * 100 * 3四位数:9 * 1000 * 4……直到n小于对应位数的数字总和为止然后把多出来是数字除以位数即可class Solution: def findNthDigit(self, n: int) -> int: l = 1 w = 1 num = 9 while n >...原创 2019-07-16 15:22:17 · 147 阅读 · 0 评论 -
897. 递增顺序查找树
其实题目可以理解为:将给定的前序转化为中序,然后中序写成只有右节点的二叉树自己的解法就是很朴素的递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self...原创 2019-07-16 15:28:45 · 180 阅读 · 0 评论 -
124. 二叉树中的最大路径和
乍一看这是一道困难题,但可能因为最近做的关于树的题目比较多,所以其实并没有真正意义上觉得特别困难,很多别的类型的中等题感觉比这还要难。题意:一棵非空二叉树,节点可正可负可为零,求最大路径和最开始的想法还是递归,其实也有一点动态规划的思想从根节点开始,依次计算子树包含子树根节点的最大路径和,保证了能够连成一条通路包含该子树根节点的最大路径和:左子树最大路径和(if>0)+根节点+右子...原创 2019-08-23 15:44:06 · 156 阅读 · 0 评论 -
104. 二叉树的最大深度
如题,求二叉树的最大深度# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None class Solution: def ...原创 2019-08-22 21:28:04 · 129 阅读 · 0 评论 -
103. 二叉树的锯齿形层次遍历
本题跟102很像,就是将二叉树的偶数层逆序输出我是直接将上一题的结果的偶数层reverse一下# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.ri...原创 2019-08-22 21:25:52 · 142 阅读 · 0 评论 -
102. 二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值,即逐层从左到右访问所有节点在子函数中传入层数,子树层数+1即可# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# se...原创 2019-08-19 21:01:19 · 110 阅读 · 0 评论
分享