leetcode解题记录
文章平均质量分 72
记录leetcode、剑指offer等算法题目求解思路
sdbhewfoqi
这个作者很懒,什么都没留下…
展开
-
【leetcode总结】解析回溯法系列:)
一、排列问题46.全排列(middle)给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]https://leetcode-cn.com/problems/permutations/solution/dai-ma-sui-xiang-lu-dai-ni-xue-tou-hui-s-mfrp/这里和...原创 2021-08-22 22:41:53 · 538 阅读 · 0 评论 -
【leetcode总结】解析dp股票系列:)
121. 买卖股票的最佳时机(easy)122. 买卖股票的最佳时机 II(easy)309.最佳买卖股票时机含冷冻期(middle)714.买卖股票的最佳时机含手续费(middle)901.股票价格跨度(middle)fucking-algorithm/动态规划系列/团灭股票问题.mdleetcode 买卖股票合集 - 木吉子的文章 - 知乎leetcode股票买卖题目汇总...原创 2021-08-19 19:46:29 · 359 阅读 · 0 评论 -
【数据结构】单调队列/栈
深度优先是用栈,先进后出;(二叉树的深度优先遍历就是先序遍历)广度优先是用堆,先进先出。深度优先搜索二叉树是先访问根结点,然后遍历左子树接着是遍历右子树,因此我们可以利用栈的先进后出的特点,先将右子树压栈,再将左子树压栈,这样左子树就位于栈顶,可以保证结点的左子树先与右子树被遍历。代码:# 深度优先遍历def dfs(self,root): stack = ...原创 2019-03-09 12:09:35 · 433 阅读 · 1 评论 -
【leetcode】720. 词典中最长的单词(any()和all()的用法)
any()是所有内容全是0,空,false才返回False。一旦有一个元素不是其中之一,就返回True。all()是要求全部元素都不是0,空,false,一旦有一个元素是其中之一,就返回False。python获取最长单词的方法:https://blog.csdn.net/cbbing/article/details/49814541解答:https://blog.c...原创 2018-10-14 22:47:21 · 471 阅读 · 0 评论 -
【剑指offer】树题目集合
二叉搜索树的第k个节点class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None# 中序遍历时相减class Solution: # 返回对应节点TreeNode def __init__(self):...原创 2019-09-09 18:53:55 · 126 阅读 · 0 评论 -
【剑指offer】逆序对
利用归并排序来解这道题。class Solution: def InversePairs(self, data): # 采用归并排序的思想,时间复杂度为O(nlogn) global count count = 0 def merge(array): global count ...原创 2019-08-12 01:17:52 · 140 阅读 · 0 评论 -
【leetcode】53. 最大子序和
完全不会o(╥﹏╥)o,类似于二路归并?原文:https://blog.csdn.net/zl87758539/article/details/51676108?utm_source=copy其实就是标准的动态规划问题:随着遍历这个数组,在到每一个位置的时候,弄一个局部最大L值,代表以当前位置为结尾的最大子串,比如说我遍历到第i个,那么以第i个为结尾的最大子串就是我们要求的L。...原创 2018-10-16 15:21:12 · 137 阅读 · 0 评论 -
【leetcode】最长公共子序列(LCS)和最长公共子串
这两个概念我之前一直没搞清。1. 最长公共子序列(LCS)1.1 问题描述1.2 思路利用动态规划。下一步就要找到状态之间的转换方程。因此可以根据这个方程来进行填表,以"helloworld"和“loop”为例:1.3 代码def LCS(string1,string2): len1 = len(string1) len2 = len(strin...原创 2019-08-08 16:45:08 · 3764 阅读 · 0 评论 -
【leetcode】594. 最长和谐子序列【collections】
nums = [1,3,2,2,5,2,3,7]import collectionsclass Solution(object): def findLHS(self, nums): """ :type nums: List[int] :rtype: int """ ans = 0 ...原创 2018-10-30 16:03:39 · 307 阅读 · 0 评论 -
【剑指offer】链表题目集合
从尾到头打印链表class Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3] def printListFromTailToHead(self, listNode): rs = [] if not ListNode:return rs while listNode: rs.appe...原创 2019-09-09 18:54:16 · 181 阅读 · 0 评论 -
【leetcode】200. 岛屿数量
给定一个由'1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出:1思路线性扫描整个二维网格,如果一个结点包含 1,则以其为根结点启动广度优先搜索。将其放入队列中,并将值设为 0 以标记访问过...原创 2019-08-29 20:52:26 · 145 阅读 · 0 评论 -
【leetcode】542. 01 矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 2:输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1思路:广度优先遍历bfs,一般题目的字眼是“最短的步数”、“最小的距离”。深搜dfs是“某一解”。首先找到给定节点,判断它是否为0,这个初始节点当作第0层,此时dista...原创 2019-08-29 19:11:40 · 236 阅读 · 0 评论 -
【leetcode】丑数集合(263、264、313——动态规划)
题目说明:1是丑数暴力解法:num反复除2,3,5直到不能整除。最终判断剩余的数字是否为1,如果是1则为丑数,否则不是丑数。类似求质数的解法:link每一个丑数必然是之前丑数与2,3或5的乘积得到的,这样下一个丑数就是用之前的丑数分别乘以2,3,5。详细算法步骤:(1)从第一个丑数1开始,求出1*2=2 ,1*3=3 ,1*5 = 5。(2)取上面乘积中大于1的最...原创 2018-11-23 21:54:43 · 424 阅读 · 0 评论 -
【数据结构】二叉树
二叉树6种遍历方式前中后遍历递归代码里有self是因为def函数在class Tree(object)类里。不在类里,就不用self啦leetcode 94 二叉树的中序遍历 递归class Solution(object): # 递归 def inorderTraversal_recursive(self, root): """ ...原创 2019-03-07 14:02:06 · 398 阅读 · 0 评论 -
【leetcode】633. 平方数之和
从0到sqrt(c)做一次遍历,将遍历过的数i的i^2存入字典,判断c-i^2是否在字典中。一个我不会的思想,记录ヾ(◍°∇°◍)ノ゙class Solution: def judgeSquareSum(self, c): """ :type c: int :rtype: bool """ d =...原创 2018-11-21 21:13:34 · 383 阅读 · 0 评论 -
【剑指offer】剩余题目汇总
个人感觉系列-_-||顺时针打印矩阵(头条)# -*- coding:utf-8 -*-import numpy as npclass Solution: # matrix类型为二维列表,需要返回列表 def printMatrix(self, matrix): # write code here res = [] if...原创 2019-09-09 18:54:07 · 149 阅读 · 0 评论 -
【leetcode】665. 非递减数列(类内调用函数)
python 类内函数互调的两种用法1. 类名.函数名2. self.函数名这道题本身没什么好记录的。因为我自己ac了,虽然代码写的烂,但也ac了。class Solution(object): def checkPossibility(self, nums): """ :type nums: List[int] ...原创 2018-11-15 16:24:08 · 229 阅读 · 0 评论 -
【数据结构】关于双指针区间 循环不变量定义
参考:https://leetcode-cn.com/problems/sort-colors/solution/kuai-su-pai-xu-partition-guo-cheng-she-ji-xun-huan/原创 2021-06-17 22:43:02 · 394 阅读 · 1 评论 -
【leetcode】893. 特殊等价字符串组
题目分析(这道题的题目真的难以理解原创 2018-12-26 17:05:51 · 402 阅读 · 1 评论 -
【leetcode】131. 分割回文串——dfs(未完)
DFS(深度优先遍历)+回溯。用递归的方式,对字符串进行切割。对于上面的”aab”作为输入,可以这么寻找回文:“a”+”ab”构成的回文串“aa”+”b”构成的回文串“aab”不是回文,所以直接退出。关于这道题为什么会用dfs?没有想通。。。解题思路link求所有答案,首先排除动态规划,应该是DFS (Palindrome Partitioning II 求个数才是动归)...原创 2018-11-20 23:15:06 · 715 阅读 · 0 评论 -
【leetcode】438. 找到字符串中所有字母异位词
最后问题缩小为:# 如何让bac判断三个元素都在abc中呢? # 比如,bab虽然ab在abc中,但是,没有c所以也是错的。A: 只要保证p中的各个字母个数在s的子串中相同即可。我的做法(超出时间限制)https://blog.csdn.net/qq_17550379/article/details/80550907思路一:(看不懂)class Solution:...原创 2018-10-22 16:11:56 · 355 阅读 · 0 评论 -
【leetcode】648. 单词替换
暴力解法超出了时间限制。要用到字典树(之后再学习。。。)ac的答案:(和超出内存限制的思路一样)root_dict = set(dict)raws = sentence.split()res = []for raw in raws: flag = False for i in range(0, len(raw)): prefix = raw[...原创 2018-11-16 11:50:36 · 421 阅读 · 0 评论 -
【leetcode】46. 全排列 —— Python引用传值 [:]
leetcode 关于全排列题目的简单总结这道题,有很多出错的地方1. 两个数据的交换,应该是 nums[p], nums[i] = nums[i], nums[p] ,而我一开始用的是 # nums[p]=nums[i] # 这种是错的;2. range()遍历列表元素,我使用了len+1,而应该是len就可以直接遍历结束;3. 题目要求返回一个列表(列表中套列表...原创 2018-12-31 11:08:04 · 341 阅读 · 0 评论 -
【leetcode】896.单调数列
python有对数组进行排序的函数sort,我们只需判断数组和排序后的数组是否相同即可。另外如果原数组是降序的话,那么就是把排序后的数组倒序,比较是否相同。class Solution(object): def isMonotonic(self, A): """ :type A: List[int] :rtype: bool ...原创 2019-01-01 21:16:21 · 161 阅读 · 0 评论 -
【leetcode】849. 到最近的人的最大距离——list.index('值')
# print ("math.ceil(math.pi) : ", math.ceil(math.pi)) # output:4# 返回一个大于等于的值思路:1. 如果首and尾是1的情况,那么只能坐在两个1之间;2. 如果首or尾是0的情况,那么可以坐在0之前或者0之后。class Solution(object): def maxDistToClosest...原创 2018-11-13 15:00:46 · 314 阅读 · 0 评论 -
【leetcode】318. 最大单词长度乘积
解题思路:这题的重点在于如何判断两个字符串是否含有相同的字符解法一:很慢但很好理解。---12%https://leetcode.com/problems/maximum-product-of-word-lengths/discuss/170947/Python-solution-not-fast-but-easy-to-understand# 找到list中最长的单词,然...原创 2018-10-17 21:05:04 · 498 阅读 · 0 评论 -
【leetcode】784. 字母大小写全排列
解答一:解答二:解答三:用46全排列的思路解from string import ascii_lowercaseclass Solution(object): def letterCasePermutation(self, S): """ :type S: str :rtype: List[str] ...原创 2019-01-01 21:41:57 · 486 阅读 · 1 评论 -
【leetcode】. 阶乘后的零——数学题(emmm)
我用的递推求阶乘,str.count('0')的方法计算。但超过题目要求的O(log n)了。所以, 最后这道题是到数学题,因式分解。。。数学推导过程只要5和一个偶数相乘,结果就有一个0,那每两个5的倍数之间肯定有偶数(5-10中间肯定有偶数吧),所以偶数不需要考虑了,而且偶数的数量肯定比5的数量多吧(现在一个男生和一个女生能结婚,但是现在有20个男生 和 10个女生,你要去算能有多...原创 2018-10-27 19:06:24 · 222 阅读 · 0 评论 -
【leetcode】找出数组的第k大的数
用快排,原始的快排def quick_sort(nums,l,r): if l<=r:return tmp = nums[0] while l<r: while l<r and nums[r]>tmp: j-=1 nums[j],nums[i]=nums[i],nums[j] ...原创 2019-08-10 18:39:42 · 6524 阅读 · 0 评论 -
【leetcode】49. 字母异位词分组
Python递归实现全排列思路:将字符串按字母顺序排列,之后相同的放到同一个list下面。class Solution(object): def groupAnagrams(self, strs): """ :type strs: List[str] :rtype: List[List[str]] """ ...原创 2018-11-07 21:56:31 · 204 阅读 · 0 评论 -
【leetcode】205. 同构字符串
给定两个字符串s和t,判断它们是否是同构的。如果s中的字符可以被替换得到t,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。示例 1:输入: s = "egg", t = "add"输出: true示例 2:输入: s = "foo", t = "bar"输出: false示例 3:输入...原创 2020-07-01 13:34:06 · 98 阅读 · 0 评论 -
【leetcode】204. 计数质数
质数的性质:对于一个数x,只需对[2,]的数进行整除,若能整除则不是素数,不能整除则为素数。(maybe超时)。 一个合数必然能分解成质因子之积。因此我们每当找到一个素数,设它为 i,那么对于2∗i,3∗i,4∗i,....,n。2∗i,3∗i,4∗i,....,n这些数来说肯定都是合数。删掉!so 只需遍历[2,],因为超过部分如果不是素数,则在前面的因子的倍数(cur_value)已...原创 2018-11-22 11:44:06 · 414 阅读 · 0 评论 -
【leetcode】788. 旋转数字
https://blog.csdn.net/qq_21162871/article/details/80380321https://blog.csdn.net/fuxuemingzhu/article/details/79378135# 可以总结出以下的要求:## 该数字中不含[3, 4, 7],否则其倒影不是数字。# 该数字中必须包含[2, 5, 6, 9]中的至少...原创 2018-10-12 20:19:15 · 533 阅读 · 0 评论 -
【leetcode】20190825字节跳动笔试
第一道# -*- coding:utf-8 -*-def Solution(N): M = [] for i in range(N): input_x = [int(x) for x in input().split()] M.append(input_x) # M = [[0,4,0], [4,0,0],[0,0,0...原创 2019-08-25 20:58:34 · 352 阅读 · 0 评论 -
【leetcode】917. 反转字符串(isalpha())
解答一:def reverseOnlyLetters(self, S): i, j = 0, len(S) - 1 S = list(S) while i < j: while i < j and not S[i].isalpha(): i += 1 while i < j and not S[j].isalph...原创 2018-10-20 17:38:35 · 209 阅读 · 0 评论 -
【数据结构】背包九讲
1. 01背包二维数组+动规状态转移方程:定义f[i][j]: 前i个物品,背包容量j下的最优解1)当前背包容量不够,为前i-1个物品最优解:j<w[i]: f[i][j] = f[i-1][j]2)当前背包容量够,判断选与不选第i个物品选:f[i][j] = f[i-1][j-w[i]] + v[i]不选:f[i][j] = f[i-1][j]#include&...原创 2019-08-04 21:12:29 · 446 阅读 · 0 评论 -
【leetcode】125. 验证回文串【isalnum()】
class Solution(object): def isPalindrome(self, s): """ :type s: str :rtype: bool """ s = s.lower() # print(s) news = "" # s[1]....原创 2018-10-26 18:46:21 · 223 阅读 · 0 评论 -
【leetcode】66. 加一
首先,我真的naive。我就直接最后一位+1,根本没有考虑进位的问题。思路一:按照最后一位+1,没有进位,+1,return;产生进位即大于9,1)如果原数组只有1位,insert(0,1);2)如果想加以后产生进位,进位又进位了。。。(有点晕)https://blog.csdn.net/qq_34364995/article/details/80284300(真的是分开,分很...原创 2018-10-21 20:18:02 · 194 阅读 · 0 评论 -
【leetcode】36. 有效的数独
利用二重循环的下标来表示行、列和小正方形,减少不必要的数据存储,每一次内循环都代表着对一行或是一列或是一个小正方形的遍历。外循环则代表对下一行,下一列和下一个小正方形的遍历。判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。 数字1-9在每一列只能出现一次。 数字1-9在每一个以粗实线分隔的3x3宫...原创 2019-08-22 11:59:03 · 111 阅读 · 0 评论 -
【面试】收集的题目
去除字符串中连续的ac 和 b,比如aaccd,去除之后就是d,因为去除中间的ac后,剩下acd,则再去除ac,剩下d。 (用栈很好解决啦,遇到一个c,判断栈顶是不是a,如果是a,则栈顶元素出栈,如果遇到b,则不做任何操作,如果遇到其他情况,将元素压入栈顶。) 将一个字符串变为数字。(这其实考察的是python内部str转int的知识,可以通过看源码了解内部的实现机理) ...原创 2019-01-20 23:08:37 · 145 阅读 · 0 评论