- 博客(253)
- 收藏
- 关注
原创 【leetcode】【medium】【每日一题】1202. 交换字符串中的元素
1202. 交换字符串中的元素给你一个字符串s,以及该字符串中的一些「索引对」数组pairs,其中pairs[i] =[a, b]表示字符串中的两个索引(编号从 0 开始)。你可以任意多次交换在pairs中任意一对索引处的字符。返回在经过若干次交换后,s可以变成的按字典序最小的字符串。示例 1:输入:s = "dcab", pairs = [[0,3],[1,2]]输出:"bacd"解释: 交换 s[0] 和 s[3], s = "bcad"交换 s[1] ...
2021-01-11 17:16:24
262
原创 并查集总结|实现优化思路
目的解决连接问题。实现图相关算法,是一种特别的树形结构。应用1)连接问题:图上任意2个点是能通过中间点连通!不能回答路径问题2)数学中集合类的实现复杂度时间复杂度近乎为O(1)实现思路基本操作union(p,q) :把q点和p点各自所属的组的所有点合并成一个find(p) :查询点p所属的组isConnected(p,q) :判断点p和q是否属于同一组实现1:数组数组的idx对应的值 表示其属于的哪个集合实现2:数...
2021-01-11 16:19:03
158
原创 排序算法总结|基本思路
本文参考bobo老师的教学视频。O(n^2)的算法1. 选择排序每次选最小的元素,放到前面排序部分的最后一个位置2. 插入排序每次从未排序部分取第一个元素,不断向前面排好序里的元素比大小+交换,直到插入合适位置缺点:频繁交换位置,交换操作耗时改进:前面排序部分后移,直到找到合适位置再将元素放入优点:在近乎有序的时候,插入效果近似O(n)3. 希尔排序(插入的改进)出发点:插入在近乎有序的时候很快,所以希尔先在大跨度上排序,然后逐渐减小步长4. 冒...
2021-01-11 15:58:14
600
原创 【leetcode】【medium】【每日一题】189. 旋转数组
189. 旋转数组给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例2:输入: [-1,-100,3,99] 和 k = 2输出: [3,99,-1,-100]解释: 向右旋转 1 步: ...
2021-01-08 11:41:03
92
原创 【leetcode】【easy】【每日一题】830. 较大分组的位置
830. 较大分组的位置在一个由小写字母构成的字符串s中,包含由一些连续的相同字符所构成的分组。例如,在字符串s = "abbxxxxzyy"中,就含有"a","bb","xxxx","z"和"yy"这样的一些分组。分组可以用区间[start, end]表示,其中start和end分别表示该分组的起始和终止位置的下标。上例中的"xxxx"分组用区间表示为[3,6]。我们称所有包含大于或等于三个连续字符的分组为较大分组。找到每一个较大分组的...
2021-01-05 18:06:59
75
原创 【leetcode】【easy】【每日一题】509. 斐波那契数
509. 斐波那契数斐波那契数,通常用F(n)表示,形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1)= 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你n,请计算F(n)。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1示例 2:输入:3输出:2解释:F(3) = F(2) + F(1)...
2021-01-04 16:36:45
118
原创 【leetcode】【medium】1143. 最长公共子序列
1143. 最长公共子序列给定两个字符串text1和text2,返回这两个字符串的最长公共子序列的长度。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。示例 1:输入:text1 = "a...
2020-12-03 17:23:14
76
原创 【leetcode】【easy】剑指 Offer 54. 二叉搜索树的第k大节点
剑指 Offer 54. 二叉搜索树的第k大节点给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1输出: 4限制:1 ≤ k ≤ 二叉搜索树元.
2020-12-01 10:40:12
69
原创 【leetcode】【medium】剑指 Offer 34. 二叉树中和为某一值的路径
剑指 Offer 34. 二叉树中和为某一值的路径输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1.
2020-11-30 16:28:49
66
原创 【leetcode】【easy】剑指 Offer 39. 数组中出现次数超过一半的数字
剑指 Offer 39. 数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000注意:本题与主站 169 题相同:https://leetcode-cn.com/problems/majority-element/题目链接:https:...
2020-10-20 20:58:33
108
原创 【leetcode】【easy】剑指 Offer 57. 和为s的两个数字
剑指 Offer 57. 和为s的两个数字输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制:1 <= nums.length <= 1
2020-10-20 18:54:33
124
原创 【leetcode】【easy】面试题 08.06. 汉诺塔问题
面试题 08.06. 汉诺塔问题在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。你需要原地修改栈。示例1: 输入:A = [2, 1, 0], B = [],
2020-08-22 08:43:53
184
原创 【leetcode】【medium】752. 打开转盘锁
752. 打开转盘锁你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字:'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'。每个拨轮可以自由旋转:例如把'9'变为'0','0'变为'9'。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为'0000',一个代表四个拨轮的数字的字符串。列表deadends包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。字符串...
2020-08-21 18:56:49
103
原创 【leetcode】【medium】138. 复制带随机指针的链表
138. 复制带随机指针的链表给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。我们用一个由n个节点组成的链表来表示输入/输出中的链表。每个节点用一个[val, random_index]表示:val:一个表示Node.val的整数。 random_index:随机指针指向的节点索引(范围从0到n-1);如果不指向任何节点,则为null。示例 1:输入:head = [[7,null]...
2020-08-21 10:27:58
112
原创 【leetcode】【题目小结】n数之和
1. 2数之和无序数组,找和为target的2个数字,返回下标。解法:hash表记录之前遇到的数字,表中不存在互补的则继续向后找。2. 2数之和-有序数组有序数组,找和为target的2个数字。解法:头尾双指针3. 在BST上的2数之和数据用BST形式储存。解法1:BST中序遍历输出为有序数组,做法转为2。解法2:hash表记录已遍历内容,做法类似1。解法3:BST上的递归,看作从中间向两端的双指针。4. 2数之和小于target找出和小于t...
2020-08-20 16:23:45
531
原创 【leetcode】【easy】653. 两数之和 IV - 输入 BST
653. 两数之和 IV - 输入 BST给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。案例 1:输入: 5 / \ 3 6 / \ \2 4 7Target = 9输出: True案例 2:输入: 5 / \ 3 6 / \ \2 4 7Target = 28输出: False题目链接:https://leetcode
2020-08-20 11:39:10
104
原创 【leetcode】【easy】167. 两数之和 II - 输入有序数组
167. 两数之和 II - 输入有序数组给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值index1 和 index2,其中 index1必须小于index2。说明:返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之...
2020-08-20 10:41:50
124
原创 【leetocde】【easy】387. 字符串中的第一个唯一字符
387. 字符串中的第一个唯一字符给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例:s = "leetcode"返回 0s = "loveleetcode"返回 2提示:你可以假定该字符串只包含小写字母。题目链接:https://leetcode-cn.com/problems/first-unique-character-in-a-string/思路先记录所有字符出现的次数,然后再取第一个次数为1的字符位置。class
2020-08-20 10:10:33
106
原创 【leetcode】【hard】295. 数据流的中位数
295. 数据流的中位数中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4]的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)addNum(2)findMedian() -> 1.5add.
2020-08-09 16:17:13
89
原创 【leetcode】【medium】1155. 掷骰子的N种方法
1155. 掷骰子的N种方法这里有d个一样的骰子,每个骰子上都有f个面,分别标号为1, 2, ..., f。我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和。如果需要掷出的总点数为target,请你计算出有多少种不同的组合情况(所有的组合情况总共有f^d种),模10^9 + 7后返回。示例 1:输入:d = 1, f = 6, target = 3输出:1示例 2:输入:d = 2, f = 6, target = 7输出:6示例 3:...
2020-08-06 23:27:35
113
原创 【leetcode】【medium】剑指 Offer 26. 树的子结构
剑指 Offer 26. 树的子结构输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3 / \ 4 5 / \1 2给定的树 B: 4 /1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:...
2020-08-05 21:27:35
99
原创 【leetcode】【medium】剑指 Offer 48. 最长不含重复字符的子字符串
剑指 Offer 48. 最长不含重复字符的子字符串请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。..
2020-07-21 18:14:44
90
原创 【leetcode】【medium】剑指 Offer 07. 重建二叉树
剑指 Offer 07. 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7限制:0 <= 节点个数 <= 5000注意:本题与主站 105 题重复:https://le.
2020-07-18 11:54:46
107
原创 【leetcode】【medium】714. 买卖股票的最佳时机含手续费
714. 买卖股票的最佳时机含手续费给定一个整数数组prices,其中第i个元素代表了第i天的股票价格 ;非负整数fee代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1:输入: prices = [1, 3, 2, 8, 4, 9], fee = 2输出: 8解...
2020-07-13 17:36:26
86
原创 【leetcode】【hard】188. 买卖股票的最佳时机 IV
188. 买卖股票的最佳时机 IV给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成k笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入: [2,4,1], k = 2输出: 2解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。示例 2:输入: [3,2,6...
2020-07-13 17:25:44
72
原创 【leetcode】【hard】123. 买卖股票的最佳时机 III
123. 买卖股票的最佳时机 III给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。 随后,在第 7 天(股票价格 ...
2020-07-13 16:59:22
127
原创 【leetcode】【easy】122. 买卖股票的最佳时机 II
122. 买卖股票的最佳时机 II给定一个数组,它的第i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股...
2020-07-13 16:30:18
73
原创 【leetcode】【medium】889. 根据前序和后序遍历构造二叉树
889. 根据前序和后序遍历构造二叉树返回与给定的前序和后序遍历匹配的任何二叉树。pre和post遍历中的值是不同的正整数。示例:输入:pre = [1,2,4,5,3,6,7], post = [4,5,2,6,7,3,1]输出:[1,2,3,4,5,6,7]提示:1 <= pre.length == post.length <= 30 pre[]和post[]都是1, 2, ..., pre.length的排列 每个输入保证至少有一个答案。...
2020-07-13 15:44:38
85
原创 【leetcode】【medium】105. 从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preor.
2020-07-13 15:09:08
100
原创 【leetcode】【medium】50. Pow(x, n)
50. Pow(x, n)实现pow(x,n),即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例2:输入: 2.10000, 3输出: 9.26100示例3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 <x< 100.0 n是 32 位有符号整数,其数值范围是[−231,231− 1]...
2020-07-13 10:54:57
80
原创 【leetcode】【medium】剑指 Offer 14- I. 剪绳子
剑指 Offer 14- I. 剪绳子给你一根长度为n的绳子,请把绳子剪成整数长度的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1]...k[m-1]。请问k[0]*k[1]*...*k[m-1]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例2:输入: 10输出: 36...
2020-07-13 10:30:41
91
原创 【leetcode】【medium】430. 扁平化多级双向链表
430. 扁平化多级双向链表多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。示例 1:输入:head = [1,2,3,4,5,6,null,null,null,7,8,9,10,null,null,11,12]输出:[1,2,3,7,8,11,12,9,10,4,5,6]
2020-07-11 22:35:08
73
原创 【leetcode】【medium】75. 颜色分类
75. 颜色分类给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。 首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。 ...
2020-07-11 20:50:36
130
原创 【leetcode】【mudium】74. 搜索二维矩阵
74. 搜索二维矩阵编写一个高效的算法来判断mxn矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。示例1:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3输出: true示例2:输入:matrix = [ [1, 3, 5, 7], [10, 11,...
2020-07-11 20:39:28
159
原创 【leetcode】【easy】448. 找到所有数组中消失的数字
448. 找到所有数组中消失的数字给定一个范围在 1 ≤ a[i] ≤n(n= 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1,n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]链接:https://leetcode-cn.com/problems/find-all...
2020-07-08 23:25:43
85
原创 【leetcode】【medium】494. 目标和
494. 目标和给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号+和-。对于数组中的任意一个整数,你都可以从+或-中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例:输入:nums: [1, 1, 1, 1, 1], S: 3输出:5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3一...
2020-07-06 23:39:33
99
原创 【leetcode】【mudium】139. 单词拆分
139. 单词拆分给定一个非空字符串s和一个包含非空单词列表的字典wordDict,判定s是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:输入: s = "applepe...
2020-07-06 22:47:17
953
原创 【leetcode】【medium】【每日一题】837. New 21 Game
837. New 21 GameAlice plays the following game, loosely based on the card game "21".Alice starts with0points, and draws numbers while she has less thanKpoints. During each draw, she gains an integer number of points randomly from the range[1, W],...
2020-06-04 00:17:43
127
原创 【leetcode】【medium】【每日一题】287. Find the Duplicate Number
287. Find the Duplicate NumberGiven an arraynumscontainingn+ 1 integers where each integer is between 1 andn(inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate number, find the duplicate one.E...
2020-05-28 22:40:08
104
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人