- 博客(92)
- 收藏
- 关注
原创 图论 | 欧拉路径 / 回路
欧拉路径 / 回路基本概念欧拉路径:图G中的一个路径包括每个边恰好一次,则该路径称为欧拉路径欧拉回路:如果一个回路是欧拉路径,则称为欧拉回路具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉路径但不具有欧拉回路的图称为半欧拉图。判断条件有向图欧拉路径:有一个点出度比入度多1(起点),有一个点入度比出度多1(终点),其余点出度等于入度欧拉回路:每个顶点出度等于入度无向图欧...
2020-04-23 19:09:26
805
原创 leetcode菜狗入门 | 207. 课程表 | 拓扑排序
课程表题目描述你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]] 输出: true解释: 总共有 2 门课程。学习课...
2020-04-04 15:21:53
140
原创 leetcode菜狗入门 | 394. 字符串解码
字符串解码题目描述给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 ...
2020-03-26 20:47:26
171
原创 leetcode菜狗入门 | 573. 松鼠模拟
松鼠模拟题目描述现在有一棵树,一只松鼠和一些坚果。位置由二维网格的单元格表示。你的目标是找到松鼠收集所有坚果的最小路程,且坚果是一颗接一颗地被放在树下。松鼠一次最多只能携带一颗坚果,松鼠可以向上,向下,向左和向右四个方向移动到相邻的单元格。移动次数表示路程。输入 1:输入: 高度 : 5宽度 : 7树的位置 : [2,2]松鼠 : [4,4]坚果 : [[3,0], [2,5]]...
2020-03-26 20:38:36
180
原创 leetcode菜狗入门 | 143. 重排链表
重排链表题目描述给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->...
2020-03-26 20:34:20
71
原创 leetcode菜狗入门 | 505. 迷宫 II
迷宫 II题目描述由空地和墙组成的迷宫中有一个球。球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动。当球停下时,可以选择下一个方向。给定球的起始位置,目的地和迷宫,找出让球停在目的地的最短距离。距离的定义是球从起始位置(不包括)到目的地(包括)经过的空地个数。如果球无法停在目的地,返回 -1。迷宫由一个0和1的二维数组表示。 1表示墙壁,0表示空地。你可以假定迷宫的边缘都是墙壁。起...
2020-03-25 15:45:29
634
原创 leetcode菜狗入门 | 236. 二叉树的最近公共祖先
二叉树的最近公共祖先题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: ...
2020-03-23 15:20:18
88
原创 leetcode菜狗入门 | 93. 复原IP地址
复原IP地址 (回溯+剪枝)题目描述给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: "25525511135"输出: ["255.255.11.135", "255.255.111.35"]代码判断和 255 的大小关系还是有点儿费劲class Solution {public: vector<string> ans; ...
2020-03-22 19:56:27
167
原创 leetcode菜狗入门 | 347. 前 K 个高频元素(map排序)
前 K 个高频元素题目描述给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n...
2020-03-21 17:19:24
96
原创 leetcode菜狗入门 | 114. 二叉树展开为链表
二叉树展开为链表题目描述给定一个二叉树,原地将它展开为链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6解题思路先展开左右两边的子树置空左子树,暂存右子树把左子...
2020-03-21 16:29:26
73
原创 leetcode菜狗入门 | 148. 排序链表(归并排序)
排序链表(归并排序)题目描述在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5解题思路找到链表的中点,这里使用双指针法...
2020-03-20 16:34:50
106
原创 leetcode菜狗入门 | 面试题51. 数组中的逆序对
数组中的逆序对题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5代码归并排序class Solution {public: int sum = 0; int reversePairs(vector<int>& num...
2020-03-19 20:26:06
119
原创 leetcode菜狗入门 | 1021. 删除最外层的括号
删除最外层的括号题目描述有效括号字符串为空 ("")、"(" + A + “)” 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 “(()(()))” 都是有效的括号字符串。如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符...
2020-03-19 18:22:23
78
原创 leetcode菜狗入门 | 739. 每日温度
每日温度题目描述根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 3000...
2020-03-18 22:29:13
82
原创 leetcode菜狗入门 | 5. 最长回文子串
最长回文子串题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"解题思路算是暴力 + 双指针吧,就是要注意回文串是偶数还是奇数的情况代码class Solution {public: ...
2020-03-18 20:21:56
75
原创 杂谈 | Git 菜狗入门
安装与配置下载https://git-scm.com/download 根据自己需求选择对应版本就 ok 啦~安装下载好之后基本一路 next 然后点 install配置首先是要有一个 GitHub 账号啦~ 直接去注册就好~然后再打开 Git Bash,创建SSH Key输入 $ ssh-keygen -t rsa -C "注册用的邮箱"中间一路回车就行,然后在红...
2020-03-18 16:01:20
97
原创 leetcode菜狗入门 | 105. 从前序与中序遍历序列构造二叉树
从前序与中序遍历序列构造二叉树题目描述根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解题思路preorder 的第一个为 ...
2020-03-17 20:47:27
63
原创 leetcode菜狗入门 | 79. 单词搜索
单词搜索题目描述给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = ...
2020-03-17 19:30:20
197
原创 leetcode菜狗入门 | 43. 字符串相乘(大数乘法)
字符串相乘(大数乘法)题目描述给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1 和 num2 的长度小于110。...
2020-03-16 22:10:18
169
原创 leetcode菜狗入门 | 91. 解码方法
解码方法题目描述一条包含字母 A-Z 的消息通过以下方式进行了编码:'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: "12"输出: 2解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。示例 2:输入: "226"输出: 3解释: 它可以解码为 "BZ" (...
2020-03-14 17:50:36
125
原创 leetcode菜狗入门 | 300. 最长上升子序列
最长上升子序列题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。解题思路使用动态规划。以当前数为结束的升序序列长度 = 以前面比它小的数为结束的最大序列长度 + 1。dp[i] = max(dp[j]) + 1 (nums[j] &l...
2020-03-14 16:00:18
57
原创 leetcode菜狗入门 | 200. 岛屿数量
岛屿数量给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3解题思路使用 dfs,已经搜索到的位置...
2020-03-13 23:10:39
74
原创 杂谈 | python批量修改文件名
主要使用 os 库import ospath='文件夹路径' #获取该目录下所有文件,存入列表中filelist=os.listdir(path)for i in filelist: #设置旧文件名(就是路径+文件名) oldname=path + os.sep + i # os.sep添加系统分隔符 #设置新文件名 ne...
2020-03-13 22:30:02
80
原创 leetcode菜狗入门 | 120. 三角形最小路径和
三角形最小路径和题目描述给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。解题思路动态规划代码class Solution {public: int m...
2020-03-12 19:18:01
84
原创 leetcode菜狗入门 | 226. 翻转二叉树
翻转二叉树题目描述翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1代码递归/** * Definition for a binary tree node. * struct TreeNode {...
2020-03-11 21:26:29
78
原创 leetcode菜狗入门 | 面试题 08.11. 硬币
面试题 08.11. 硬币题目描述硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)示例1: 输入: n = 5 输出:2 解释: 有两种方式可以凑成总金额:5=55=1+1+1+1+1示例2: 输入: n = 10 输出:4 解释: 有四种方式可以凑成总金额:10=101...
2020-03-11 20:25:29
337
原创 leetcode菜狗入门 | 82. 删除排序链表中的重复元素 II
删除排序链表中的重复元素 II题目描述给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3代码/** * Definitio...
2020-03-11 19:11:34
96
原创 leetcode菜狗入门 | 31. 下一个排列
下一个排列题目描述实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1解题思路从后往前遍历,如果 n...
2020-03-10 17:38:28
81
原创 leetcode菜狗入门 | 64. 最小路径和
最小路径和题目描述给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。解题思路动态规划,和62.不同路径基本一样代码class Solution...
2020-03-10 16:24:27
68
原创 leetcode菜狗入门 | 543. 二叉树的直径
二叉树的直径题目描述给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点...
2020-03-10 16:04:06
68
原创 leetcode菜狗入门 | 75. 颜色分类
颜色分类题目描述给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]解题思路三路快排思想,大于1的放右边,小于1的...
2020-03-09 21:13:32
707
原创 leetcode菜狗入门 | 98. 验证二叉搜索树
验证二叉搜索树题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ ...
2020-03-09 15:58:42
84
原创 leetcode菜狗入门 | 54. 螺旋矩阵
螺旋矩阵题目描述给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12...
2020-03-08 17:10:38
77
原创 leetcode菜狗入门 | 322. 零钱兑换
零钱兑换题目描述给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -...
2020-03-08 16:16:26
87
原创 leetcode菜狗入门 | 39. 组合总和
组合总和题目描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所求...
2020-03-07 19:11:00
151
原创 leetcode菜狗入门 | 92. 反转链表 II
反转链表 II题目描述反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL解题思路找到翻转开始的起点以及起点的前一个节点,然后每次把起点的后一个节点插...
2020-03-07 18:12:12
92
原创 leetcode菜狗入门 | 面试题 17.21. 直方图的水量,42. 接雨水
接雨水题目描述给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分表示水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6解题思路遍历解法,讨...
2020-03-07 16:59:12
212
原创 leetcode菜狗入门 | 面试题57 - II. 和为s的连续正数序列
和为s的连续正数序列题目描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]解题思路暴力枚举法...
2020-03-07 00:22:27
90
原创 leetcode菜狗入门 | 61. 旋转链表
旋转链表题目描述给定一个链表,旋转链表,将链表每个节点向右移动 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 步:...
2020-03-06 22:32:01
63
原创 leetcode菜狗入门 | 78. 子集
子集题目描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]解题思路使用回溯,和46. 全排列有很多相似之处代码(C++)class S...
2020-03-06 21:10:38
87
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人