暑假算法
镇长1998
菜鸟升级。
展开
-
LeetCode 242. 有效的字母异位词
给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。1. 直接对两个字符串排序2. 对于每一个字符串构建一个map,最终...原创 2019-07-13 23:07:36 · 75 阅读 · 0 评论 -
LeetCode 15. 三数之和
给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c ,使得a + b + c =0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]思路: 1...原创 2019-07-14 10:56:02 · 108 阅读 · 0 评论 -
LeetCode 98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例1:输入: 2 / \ 1 3输出: true示例2:输入: 5 / \ 1 4 / \ 3 ...原创 2019-07-14 11:55:19 · 85 阅读 · 0 评论 -
Leetcode 235. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root =[6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: ro...原创 2019-07-14 19:07:46 · 81 阅读 · 0 评论 -
LeetCode 122. 买卖股票的最佳时机 II
给定一个数组,它的第i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔...原创 2019-07-15 11:46:25 · 116 阅读 · 0 评论 -
LeetCode 102. 二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]这道题既可以用DFS,也可以用BFS,但是BFS需要单独划分...原创 2019-07-15 17:21:22 · 104 阅读 · 0 评论 -
LeetCode 104. 二叉树的最大深度 三种方法:Recursion、DFS、BFS
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3递归的方法没啥说的,从数据结构这门课上就讲了好多遍。 最大深度就是左子树...原创 2019-07-15 23:18:06 · 240 阅读 · 0 评论 -
LeetCode 17. 电话号码的字母组合 LeetCode 22 .括号生成
LeetCode 17. 电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。class Solution: def go(self,n,_th,digits,res): if n == 0: self.ans.append(res)...原创 2019-07-16 16:53:24 · 268 阅读 · 0 评论 -
二分查找法:LeetCode 69 x 的平方根 LeetCode 367
LeetCode 69 这道题是求正整数的平方根,就是求 √x 的值,由于 y = √x 是一个单调递增的函数,因此可以用二分查找法来查找结果。class Solution: def mySqrt(self, x: int) -> int: l = 1 r = x if x == 0 or x == 1: ...原创 2019-07-19 00:25:01 · 231 阅读 · 0 评论 -
手动10进制转 2-16 进制 其余进制转10进制
10进制转其余进制: def find_other(self,x,k): s = '' map_c = {0:'0',1:'1',2:'2',3:'3',4:'4',5:'5',6:'6',7:'7',8:'8',9:'9',10:'A',11:'B',12:'C',13:'D',14:'E',15:'F'} ...原创 2019-07-23 20:02:36 · 95 阅读 · 0 评论 -
LeetCode 208. 实现 Trie (前缀树) Python
实现一个 Trie (前缀树),包含insert,search, 和startsWith这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.startsWith("app...原创 2019-07-19 11:19:31 · 865 阅读 · 0 评论 -
计算机中的位运算
X = X &(X - 1) 的作用是清楚最低位的1,注意这里最低位的1是在所有的1中最低位的1,并不是在所有的二进制位中的最低位。x & -x # 因为在计算机中的加减运算是用补码实现的,所以这样会得到最低位的1(其余位全部为0),注意这里的1也说的是所有1中的最低位的1. 计算机中的负数是用补码表示的,正数补码和补码一样!!!!x = x <...原创 2019-07-19 16:09:03 · 179 阅读 · 0 评论 -
LeetCode 101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2/ \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3·······第一次看...原创 2019-07-29 11:00:41 · 71 阅读 · 0 评论 -
LeetCode 168. Excel表列名称
给定一个正整数,返回它在 Excel 表中相对应的列名称。例如, 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB ...这道题大体上就是进制转换问题,就是将10进制数转换成26进制,但是不全是26进制,因为正常的26进制为0-25...原创 2019-07-24 10:55:13 · 105 阅读 · 0 评论 -
循环节长度以及循环节
循环节长度两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。比如,11/13=6=>0.846153846153….. 其循环节为[846153] 共有6位。这是一道蓝桥杯的题目,试卷上是一个填空题,思路就是不断的对除数取余,然后乘10后再取余,直到余数在之前出现过或者为0 结束。为什么是这样的呢: 我来试着解释一下:首先我先对上面写的思路模拟一下,好更...原创 2019-07-24 13:17:34 · 5771 阅读 · 0 评论 -
LeetCode 51. N皇后
N 皇后问题就是深搜和回溯的最好练手给定一个整数n,返回所有不同的n皇后问题的解决方案。每一种解法包含一个明确的n皇后问题的棋子放置方案,该方案中'Q'和'.'分别代表了皇后和空位。示例:输入: 4输出: [ [".Q..", // 解法 1 "...Q", "Q...", "..Q."], ["..Q.", // 解法 2 "Q....原创 2019-07-17 15:29:18 · 103 阅读 · 0 评论 -
AttributeError: 'NoneType' object has no attribute 'append'
问题出在append函数的使用上,append函数本身无返回值,返回的就是None,append函数赋给了这个变量,a=a.append(b), a就是None了。 Python里的变量类似于指针,可以任意指向任何类型的数据类型的。当再次对a使用append的时候,就会出现'NoneType' object has no attribute 'append'这类错误。...原创 2019-07-17 15:33:44 · 1578 阅读 · 0 评论 -
计算某年某月某日是星期几 Python
前提:公元1年1月1日是星期一def data(y,m,d): ans = 0 month = [31,29,31,30,31,30,31,31,30,31,30,31] if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0: month[1] = 29 else: month[1...原创 2019-07-24 14:58:06 · 5691 阅读 · 4 评论 -
LeetCode 543. 二叉树的直径 LeetCode 124. 二叉树中的最大路径和
LeetCode 543给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回3, 它的长度是路径 [4,2,1,3] 或者[5,2,1,3]。注意:...原创 2019-07-29 17:12:42 · 209 阅读 · 0 评论 -
LeetCode 52. N皇后 II
问题:给定一个整数n,返回n皇后不同的解决方案的数量。还是N皇后问题,这道题贴出来是记录下我这次写这道题明白的一些东西。1. 代码中的DFS函数的作用是:找到在 level 这一层的皇后的放置位置,其实就是找到level这一层的所有地址内哪一个位置放置皇后, 使得最终N皇后放完之后各皇后之间都不发生冲突。2. 在N皇后问题里面的DFS函数中不需要判断地址是否越界,...原创 2019-07-19 23:54:11 · 135 阅读 · 0 评论 -
LeetCode 449 序列化和反序列化二叉搜索树
序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。设计一个算法来序列化和反序列化二叉搜索树。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。编码的字符串应尽可能紧凑。链接:https://leetcode...原创 2019-07-29 19:17:56 · 136 阅读 · 0 评论 -
LeetCode 36. 有效的数独
判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。 数字1-9在每一列只能出现一次。 数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用'.'表示。说明:一个有效的数独(部分已被填充)不一定是可解的。 只需要根...原创 2019-07-17 22:46:14 · 226 阅读 · 0 评论 -
LeetCode 120. 三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为11(即,2+3+5+1= 11)。这道题的第一个难点就出现在题目中给出的三角形。其实那就是一个普通的二维数组,为了表现成三角形所以加了缩进。[...原创 2019-07-20 16:51:21 · 78 阅读 · 0 评论 -
LeetCode 230. 二叉搜索树中第K小的元素
给定一个二叉搜索树,编写一个函数kthSmallest来查找其中第k个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 1BST的中序遍历的应用,中序之后将所有结点的值保存在一个数组里,由于中序...原创 2019-07-25 09:57:18 · 91 阅读 · 0 评论 -
LeetCode 513. 找树左下角的值
给定一个二叉树,在树的最后一行找到最左边的值。示例 1:输入: 2 / \ 1 3输出:1注意:您可以假设树(即给定的根节点)不为NULL。广度优先搜索BFS的应用class Solution: def findBottomLeftValue(self, root: TreeNode) -> int: re...原创 2019-07-25 10:45:44 · 130 阅读 · 0 评论 -
Acwing 788. 逆序对的数量 C++
给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。输入格式第一行包含整数n,表示数列的长度。第二行包含 n 个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围1≤n≤100000输入样例:...原创 2019-07-30 10:49:48 · 302 阅读 · 0 评论 -
Acwing 790. 数的三次方根
给定一个浮点数n,求它的三次方根。输入格式共一行,包含一个浮点数n。输出格式共一行,包含一个浮点数,表示问题的解。注意,结果保留6位小数。数据范围−10000≤n≤10000−10000≤n≤10000输入样例:1000.00输出样例:10.000000这道题和之前的leetcode上的题目的不同在于leetcode上的题目的输入都是整数,而...原创 2019-07-30 11:19:26 · 552 阅读 · 0 评论 -
C++ Non-zero exit code (1)
问题是:int main() 里没有返回return 0;原创 2019-07-30 11:27:09 · 1250 阅读 · 0 评论 -
如何在Python中创建一个指定大小的一维列表或者二维列表
#一维列表的创建: a = [None] * n # 创建一个初值为None的长度为n的列表a,None只是一种初值也可换成其他的初值。# 二维列表的创建: a = [[0 for col in range(m)] for row in range(n)] # 创建一个n*m的二维矩阵a,每个初值都是0...原创 2019-07-20 23:11:04 · 19059 阅读 · 1 评论 -
LeetCode 123. 买卖股票的最佳时机 III
给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获...原创 2019-07-21 14:48:19 · 117 阅读 · 0 评论 -
LeetCode 785. 判断二分图
给定一个无向图graph,当这个图为二分图时返回true。如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边:graph[i]中不存...原创 2019-07-25 14:00:19 · 170 阅读 · 0 评论 -
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(logn) 级别。如果数组中不存在目标值,返回[-1, -1]。在排序数组中查找元素的第一个和最后一个位置今天新看了一类的二分模板,二分模板有不少,这个还算真是我见得代码最少的。 通过这个模板我也是理解了这道题。 见Acwin...原创 2019-07-25 16:51:11 · 90 阅读 · 0 评论 -
LeetCode 74 搜索二维矩阵 Python
编写一个高效的算法来判断m x n矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例1:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3输出: true之前做的二分查找的题都...原创 2019-07-25 18:27:00 · 173 阅读 · 0 评论 -
LeetCode 56.合并区间 Acwing 803. 区间合并
Leetcode56给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] ...原创 2019-07-30 23:10:51 · 129 阅读 · 0 评论 -
LeetCode 162. 寻找峰值 二分 Python
峰值元素是指其值大于左右相邻值的元素。给定一个输入数组nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设nums[-1] = nums[n] = -∞。原创 2019-07-25 21:41:11 · 211 阅读 · 0 评论 -
LeetCode 436. 寻找右区间
给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间i 的终点,这可以称为 j 在 i 的“右侧”。对于任何区间,你需要存储的满足条件的区间j 的最小索引,这意味着区间 j 有最小的起始点可以使其成为“右侧”区间。如果区间j 不存在,则将区间 i 存储为 -1。最后,你需要输出一个值为存储的区间值的数组。注意:你可以假设区间的终点总是大于它的起始点...原创 2019-07-22 13:35:29 · 156 阅读 · 0 评论 -
LeetCode 19. 删除链表的倒数第N个节点 C++
给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗? 一遍有效的话,就是用双指针。对于链表的删除问题,最好的是在...原创 2019-07-26 11:18:45 · 76 阅读 · 0 评论 -
LeetCode 237. 删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 --head =[4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 ...原创 2019-07-26 11:43:54 · 63 阅读 · 0 评论 -
LeetCode 61. 旋转链表 C++
给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。示例1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5...原创 2019-07-26 12:42:18 · 153 阅读 · 0 评论 -
LeetCode 24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs具体没啥好说的,就是一个两两交换位置。...原创 2019-07-26 13:29:16 · 91 阅读 · 0 评论