![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
canaryW
武大计科硕士,阿里云工程师,研究兴趣包括图神经网络、分布式计算
展开
-
775全局倒置与局部倒置
数组 A 是 [0, 1, …, N - 1] 的一种排列,N 是数组 A 的长度。全局倒置指的是 i,j 满足 0 <= i < j < N 并且 A[i] > A[j] ,局部倒置指的是 i 满足 0 <= i < N 并且 A[i] > A[i+1] 。当数组 A 中全局倒置的数量等于局部倒置的数量时,返回 true 。示例 1:输入: A ...原创 2019-10-17 10:51:04 · 129 阅读 · 0 评论 -
797所有可能的路径
妈的深度优先都给忘了,写这篇博客来巩固一下对深度优先的印象深度优先的理论不讲了,直接上题目给一个有 n 个结点的有向无环图,找到所有从 0 到 n-1 的路径并输出(不要求按顺序)二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译者注:有向图是有方向的,即规定了a→b你就不能从b→a)空就是没有下一个结点了。示例:输入: [[1,2], [3], [...原创 2019-10-13 14:20:51 · 230 阅读 · 0 评论 -
789逃脱阻碍者
你在进行一个简化版的吃豆人游戏。你从 (0, 0) 点开始出发,你的目的地是 (target[0], target[1]) 。地图上有一些阻碍者,第 i 个阻碍者从 (ghosts[i][0], ghosts[i][1]) 出发。每一回合,你和阻碍者们可以同时向东,西,南,北四个方向移动,每次可以移动到距离原位置1个单位的新位置。如果你可以在任何阻碍者抓住你之前到达目的地(阻碍者可以采取任意...原创 2019-10-11 20:44:01 · 115 阅读 · 0 评论 -
哈希解题-----leetcode299猜数字游戏
这一题如果用hash做非常容易,时间复杂度为O(N)你正在和你的朋友玩 猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜。每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位数字猜对了但是位置不对(称为“Cows”, 奶牛)。你的朋友将会根据提示继续猜,直到猜出秘密数字。请写出一个根据秘密数字和朋友的猜测数返回提示的函...原创 2019-03-29 09:42:24 · 257 阅读 · 0 评论 -
用最少的箭引爆气球----leetcode--贪心
这是一个要让我们射爆的题目:在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xs...原创 2019-03-28 17:26:13 · 165 阅读 · 0 评论 -
贪心算法----最小差值
没做出来,看了老哥们的题解才恍然大悟给定一个整数数组 A,对于每个整数 A[i],我们可以选择 x = -K 或是 x = K,并将 x 加到 A[i] 中。在此过程之后,我们得到一些数组 B。返回 B 的最大值和 B 的最小值之间可能存在的最小差值。示例 1:输入:A = [1], K = 0输出:0解释:B = [1]示例 2:输入:A = [0,10], K = 2输出:...原创 2019-04-07 18:09:43 · 1564 阅读 · 0 评论 -
leetcode221---最大正方形----动态规划
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4这个动态规划问题我使用一个和0 1矩阵相同大小的矩阵存储以该点为右下角的正方形的最大边长,最后返回最大边长的平方。主要思想:1.dp[i][j]表示的就是以(i,j)为结尾的最大正方形的边长2.对于(...原创 2019-03-28 14:30:25 · 348 阅读 · 0 评论 -
贪心算法----leetcode最长数对链
给出 n 个数对。 在每一个数对中,第一个数字总是比第二个数字小。现在,我们定义一种跟随关系,当且仅当 b < c 时,数对(c, d) 才可以跟在 (a, b) 后面。我们用这种形式来构造一个数对链。给定一个对数集合,找出能够形成的最长数对链的长度。你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。示例 :输入: [[1,2], [2,3], [3,4]]输出: ...原创 2019-03-28 12:19:41 · 207 阅读 · 0 评论 -
leetcode-----回溯算法---组合
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]这一题是典型的回溯算法,如果要求K个数的结果,我们可以通过求K-1个数的结果,然后在每个结果的后面加上一个比K-1个数的末尾还大的元素 public List<List...原创 2019-03-28 11:59:26 · 344 阅读 · 0 评论 -
数据结构复习---leetcode328 odd even linked list
链表的题目,一定要想明白了再写,否则会越写越乱,想明白了很简单( •̀ ω •́ )✧ public ListNode oddEvenList(ListNode head) { if(head==null) return head; ListNode p=head,q=head.next,r=p,s=q; while(p!=null&a...原创 2019-04-01 18:15:39 · 104 阅读 · 0 评论 -
数据结构复习----先序遍历构造二叉树
leetcode1008 public TreeNode bstFromPreorder(int[] preorder) { TreeNode root=new TreeNode(preorder[0]); construct(root,1,preorder.length-1,preorder); return root; } ...原创 2019-04-01 11:55:05 · 407 阅读 · 0 评论 -
重温数据结构------leetcode出现次数最多的子树元素和
这一题相对来说比较简单给出二叉树的根,找出出现次数最多的子树元素和。一个结点的子树元素和定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。然后求出出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的元素(不限顺序)。示例 1输入:5/ 2 -3返回 [2, -3, 4],所有的值均只出现一次,以任意顺序返回所有值。示例 2输入:5...原创 2019-03-28 20:36:53 · 241 阅读 · 0 评论 -
Java字符串训练----leetcode翻转字符串里的单词
这一题很简单,但是还是有很多可以学习的东西在里面给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输出: “world! hello”解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: “a g...原创 2019-03-28 21:13:53 · 267 阅读 · 0 评论 -
数据结构复习------二叉树中的插入操作leetcode
题目极其简单:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 保证原始二叉搜索树中不存在新值。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和 插入的值: 5你可以返回这个二叉搜索树: ...原创 2019-03-28 23:18:17 · 185 阅读 · 0 评论 -
leetcode399-除法求值( ̄︶ ̄)↗
给出方程式 A / B = k, 其中 A 和 B 均为代表字符串的变量, k 是一个浮点型数字。根据已知方程式求解问题,并返回计算结果。如果结果不存在,则返回 -1.0。示例 :给定 a / b = 2.0, b / c = 3.0问题: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ?返回 [6.0, 0.5, -1.0, 1....原创 2019-04-28 16:02:49 · 424 阅读 · 0 评论 -
查找和最小的K对数字
给定两个以升序排列的整形数组 nums1 和 nums2, 以及一个整数 k。定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2。找到和最小的 k 对数字 (u1,v1), (u2,v2) … (uk,vk)。示例 1:输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3输出: [1,2],[1,4],[1,6]解释:...原创 2019-04-20 11:01:29 · 676 阅读 · 0 评论 -
单调栈
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的都是 [30,...原创 2019-05-26 15:44:57 · 215 阅读 · 0 评论 -
leetcode491 递增子序列
这一题使用DFS回溯法,我们先来分析一下这种方法的时间复杂度:如图。由于我们知道数组的长度不超过15,所以这颗树最坏的情况的啊hi见复杂度为2^15,也就是几十万的计算量,是可以接收的。那么我们根据思路写出算法:class Solution { public List<List<Integer>> findSubsequences(int[] nums) ...原创 2019-08-10 11:21:28 · 714 阅读 · 0 评论 -
leetcode547.朋友圈,并查集解法
链接:https://leetcode-cn.com/problems/friend-circles班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已...原创 2019-08-31 17:39:21 · 1182 阅读 · 0 评论 -
两个数组的最长子序列
刷leetcode遇到一个题:抽象看待这个题,就是求两个数组的最长子序列,只要最长子序列求出来了,那么这一题的答案就是len(word1)+len(word2)-2*子序列长度,先去吃饭,回来慢慢想...原创 2019-09-25 17:51:41 · 623 阅读 · 0 评论 -
非常经典的Dijkstra算法
遇到leetcode上面一道纯Dijkstra算法,自己愣是没想出来,知道考Dijkstra算法但是自己忘了,阶这个机会把Dijkstra算法给写一遍,也算是为去年划水上过的数据结构课赎罪。有 N 个网络节点,标记为 1 到 N。给定一个列表 times,表示信号经过有向边的传递时间。 times[i] = (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点...原创 2019-10-10 19:14:13 · 499 阅读 · 0 评论 -
数据结构复习------二叉树的堂兄弟节点
class Solution { public boolean isCousins(TreeNode root, int x, int y) { return depth(root,x)==depth(root,y)&&father(root,x)!=father(root,y); } int depth(TreeNode root,int...原创 2019-04-01 11:37:48 · 385 阅读 · 0 评论 -
贪心算法----划分字母区间leetcode763
3ms beats 100% in java 设立一个lastIndex数组存放每个字母最后一次出现的位置,然后从前向后找,如果一个区间里面某个字符的最后一个位置比这个区间的终点还要靠后,那么区间的终点=这个字符的最后一次出现的位置,时间O(N),贪心算法class Solution { public List<Integer> partitionLabels(String ...原创 2019-04-05 14:36:28 · 139 阅读 · 0 评论 -
贪心题解---leetcode救生艇
第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。返回载到每一个人所需的最小船数。(保证每个人都能被船载)。示例 1:输入:people = [1,2], limit = 3输出:1解释:1 艘船载 (1, 2)示例 2:输入:people = [3,2,2,1], limit = ...原创 2019-04-04 17:52:35 · 762 阅读 · 0 评论 -
trie类的Java实现
今天做的一个题,开始用一般的字符串方法去做,但是时间复杂度非常高,看了评论之后去写了一个trie类。谈谈我对于trie的用处的理解:比方说我有很多字符串,如果要在这些字符串里面查找一个特定的字符串,我们需要的时间复杂度是O(n),但是我构造一个trie树,那么我的时间复杂度就是log26(n),也就是O(logn),所有能大大减小我的查找次数。另外,当我找到一个字符串时,我在trie树向下遍历...原创 2019-03-12 20:31:21 · 388 阅读 · 0 评论 -
解决查找问题------双指针法
我们在解决查找问题时有一个方法是双指针法:考虑这样一个问题:在一个排序数组中查找两个数的和是一个特定的数sum我们有一个o(1)的方法就是设两个指针left与right,开始left=0,right=数组长度-1;那么while(left<right){如果left的值与right的值之和<sum,left++;如果left与right的和>sum,right–;如...原创 2019-03-16 23:45:40 · 409 阅读 · 0 评论 -
贪心------无重叠区间
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]...原创 2019-03-20 19:45:22 · 252 阅读 · 0 评论 -
贪心入门----------分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小...原创 2019-03-20 12:19:34 · 114 阅读 · 0 评论 -
拓扑排序-----leetcode 课程表||
现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例 1:输入: 2, [[1,0]]输出: [0...原创 2019-03-20 10:53:38 · 169 阅读 · 0 评论 -
摩尔投票法------寻找出现次数很多的数
有一个数组,这个数组里面有一个出现次数至少是数组长度一半的数,找出它。要求时间复杂度为O(N),空间复杂度为O(1)这里我们有一个算法----摩尔投票法:我们在数组中每一次消除两个不相同的数,因为数组里面有一个数字出现次数是数组长度的一半,所以最后剩的那个元素一定是我们要找到元素。下面是代码实现 public static int majority(int nums[]) { int...原创 2019-03-19 20:44:28 · 245 阅读 · 0 评论 -
两个排序数组找中位数
A和B是两个排序数组,如果A的中位数==B的中位数,返回中位数;如果A的中位数< B的中位数,结果的中位数一定在A的右半部分和B的左半部分。如果A的中位数>B的中位数,那么结果的中位数一定在A的左半部分和B的右半部分。...原创 2019-03-15 08:59:37 · 897 阅读 · 0 评论 -
DP----最长递增子序列的个数
给定一个未排序的整数数组,找到最长递增子序列的个数。示例 1:输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。示例 2:输入: [2,2,2,2,2]输出: 5解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。一个很典型的动态规划问题,开始走了一些弯路。我后来转变了思路...原创 2019-03-19 15:28:05 · 145 阅读 · 0 评论 -
”长板效应“
我们给出两个单词数组 A 和 B。每个单词都是一串小写字母。现在,如果 b 中的每个字母都出现在 a 中,包括重复出现的字母,那么称单词 b 是单词 a 的子集。 例如,“wrr” 是 “warrior” 的子集,但不是 “world” 的子集。如果对 B 中的每一个单词 b,b 都是 a 的子集,那么我们称 A 中的单词 a 是通用的。你可以按任意顺序以列表形式返回 A 中所有的通用单词。...原创 2019-03-09 17:17:47 · 1925 阅读 · 0 评论 -
动态规划----最大上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。我刚开始的想法是用数组存答案,即前三个数的最长上升长度是多少,前四个是多少……但是被打脸了。看来答案,一个思路是用数组temp【K】存以K结尾的最大上升长度,最后遍历数组,查找最大的上升长度。cla...原创 2019-03-17 20:53:13 · 253 阅读 · 0 评论 -
DP--------最大整除子集
给出一个由无重复的正整数组成的集合,找出其中最大的整除子集,子集中任意一对 (Si,Sj) 都要满足:Si % Sj = 0 或 Sj % Si = 0。如果有多个目标子集,返回其中任何一个均可。示例 1:输入: [1,2,3]输出: [1,2] (当然, [1,3] 也正确)示例 2:输入: [1,2,4,8]输出: [1,2,4,8]1.最先的想法是将数组排序,这样的话我们只需...原创 2019-03-17 21:56:29 · 550 阅读 · 0 评论 -
贪心算法----leetcode991坏了的计算器
在显示着数字的坏计算器上,我们可以执行以下两种操作:双倍(Double):将显示屏上的数字乘 2;递减(Decrement):将显示屏上的数字减 1 。最初,计算器显示数字 X。返回显示数字 Y 所需的最小操作数。示例 1:输入:X = 2, Y = 3输出:2解释:先进行双倍运算,然后再进行递减运算 {2 -> 4 -> 3}.示例 2:输入:X = 5, Y =...原创 2019-04-04 16:15:48 · 142 阅读 · 0 评论 -
哈希表解题
Given an arbitrary ransom note string and another string containing letters from all the magazines, write a function that will return true if the ransom note can be constructed from the magazines ; ot...原创 2019-04-04 15:13:57 · 322 阅读 · 0 评论 -
leetcode---最长重复子数组(Java)
给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例 1:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出: 3解释:长度最长的公共子数组是 [3, 2, 1]。说明:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100很好的动态规划的题目,以空间换时间。我们建...原创 2019-03-26 18:14:32 · 462 阅读 · 0 评论 -
leetcode676实现一个魔法字典
就是一个花里胡哨的菜逼题目实现一个带有buildDict, 以及 search方法的魔法字典。对于buildDict方法,你将被给定一串不重复的单词来构建一个字典。对于search方法,你将被给定一个单词,并且判定能否只将这个单词中一个字母换成另一个字母,使得所形成的新单词存在于你构建的字典中。示例 1:Input: buildDict([“hello”, “leetcode”]), O...原创 2019-03-29 23:43:00 · 209 阅读 · 0 评论 -
DP----leetcode516最长回文子序列
这个题也非常有意思:给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。示例 1:输入:“bbbab”输出:4一个可能的最长回文子序列为 “bbbb”。示例 2:输入:“cbbd”输出:2一个可能的最长回文子序列为 “bb”。 public static int longestPalindromeSubseq(String s) { ...原创 2019-03-29 20:21:05 · 320 阅读 · 0 评论