算法相关
听雨眠_sun
好好生活,大道至简
展开
-
【leetcode】1128. 等价多米诺骨牌对的数量
给你一个由一些多米诺骨牌组成的列表 dominoes。如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。形式上,dominoes[i] = [a, b] 和 dominoes[j] = [c, d] 等价的前提是 a == c 且 b == d,或是 a == d 且 b==c。在 0 <= i < j < dominoes.length 的前提下,找出满足 dominoes[i] 和 dominoes[j] 等价的骨牌对 (原创 2021-01-26 22:54:58 · 139 阅读 · 0 评论 -
【leetcode】107. 二叉树的层次遍历 II
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20/ \ 15 7返回其自底向上的层次遍历为:[[15,7],[9,20],[3]]题解:/** * Definition for a binary tree node. * public class TreeNode { * int val; * Tr原创 2020-10-15 22:06:56 · 117 阅读 · 0 评论 -
【leetcode】打卡题701. 二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和 插入的值: 5你可以返回这个二叉搜索树: 4 / \ 2 7 / \ /1 3 5或者这个树也是有效的原创 2020-09-30 09:43:29 · 145 阅读 · 0 评论 -
【leetcode】23. 合并K个升序链表
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = []输出:[]示例原创 2020-09-26 20:30:21 · 109 阅读 · 0 评论 -
【leetcode】46. 全排列
给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]题解全排列问题是标准回溯法模板题,可以参考上一篇写的模板套进去即可。class Solution { public List<List<Integer>> permute(int[] nums) { List<List<Integer&原创 2020-09-08 17:06:13 · 94 阅读 · 0 评论 -
【leetcode】面试题 08.07. 无重复字符串的排列组合
无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。示例1:输入:S = “qwe”输出:[“qwe”, “qew”, “wqe”, “weq”, “ewq”, “eqw”]示例2:输入:S = “ab”输出:[“ab”, “ba”]提示:字符都是英文字母。字符串长度在[1, 9]之间。题解这是标准的回溯法,上次在网上看到一个模板觉得很好:void backtrack(选择列表, 当前路径){ if (当前路径满足最终条件) { // 一般是遍原创 2020-09-08 16:46:13 · 170 阅读 · 0 评论 -
【leetcode】面试题 04.08. 首个共同祖先
设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] 3 / \ 5 1 / \ / \ 6 2 0 8 / \ 7 4示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节点 1 的最近原创 2020-09-07 11:35:02 · 146 阅读 · 0 评论 -
【leetcode】二叉树的前序遍历
给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3]1\2/3输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?题目说的实话,递归算法的确很简单,先贴一下递归代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * Tre原创 2020-08-25 22:10:12 · 231 阅读 · 1 评论 -
【leetcode】面试题 04.06. 后继者
题解:这种解法是对于普通二叉树而言,对于二叉搜索树,可以参考第二段代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode inorderS原创 2020-08-23 08:58:37 · 138 阅读 · 0 评论 -
【leetcode】面试题 04.05. 合法二叉搜索树
实现一个函数,检查一棵二叉树是否为二叉搜索树。示例 1:输入:2/ \1 3输出: true示例 2:输入: 5 / \1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 ,但是其右子节点值为 4 。题解:/** * Definition for a binary tree no原创 2020-08-22 22:02:40 · 176 阅读 · 0 评论 -
【leetcode】面试题 04.04. 检查平衡性
实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回原创 2020-08-22 21:28:58 · 164 阅读 · 0 评论 -
【leetcode】面试题 04.03. 特定深度节点链表
给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。示例:输入:[1,2,3,4,5,null,7,8] 1 / \ 2 3 / \ \ 4 5 7/8输出:[[1],[2,3],[4,5,7],[8]]题解:这题和04.01相似,通过队列来进行二叉树的层次遍历。/** * Definition for a binary tree node.原创 2020-08-21 23:46:48 · 161 阅读 · 0 评论 -
【leetcode】面试题 04.02. 最小高度树
给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 题解:/** * Definition for a binary tree node. * public class TreeNode { * in原创 2020-08-21 23:18:09 · 146 阅读 · 0 评论 -
【leetcode】面试题 04.01. 节点间通路
节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。示例1:输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2输出:true示例2:输入:n = 5, graph = [[0, 1], [0, 2], [0, 4], [0, 4], [0, 1], [1, 3], [1, 4], [1, 3], [2, 3], [3, 4]], start = 0, target = 4输出 tr原创 2020-08-21 23:01:55 · 243 阅读 · 0 评论 -
【leetcode】面试题 03.02. 栈的最小值
请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin(); --> 返回 -3.minStack.pop();minStack.top(); -->原创 2020-08-18 22:56:03 · 120 阅读 · 0 评论 -
【leetcode】面试题 03.03. 堆盘子
堆盘子。设想有一堆盘子,堆太高可能会倒下来。因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请实现数据结构SetOfStacks,模拟这种行为。SetOfStacks应该由多个栈组成,并且在前一个栈填满时新建一个栈。此外,SetOfStacks.push()和SetOfStacks.pop()应该与普通栈的操作方法相同(也就是说,pop()返回的值,应该跟只有一个栈时的情况一样)。 进阶:实现一个popAt(int index)方法,根据指定的子栈,执行pop操作。当某个栈为空时,应当删除原创 2020-08-18 22:36:30 · 165 阅读 · 0 评论 -
【leetcode】面试题 03.05. 栈排序
栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。示例1:输入:[“SortedStack”, “push”, “push”, “peek”, “pop”, “peek”][[], [1], [2], [], [], []]输出:[null,null,null,1,null,2]示例2:输入:[“Sorted原创 2020-08-16 17:37:52 · 290 阅读 · 0 评论 -
【leetcode】面试题 03.04. 化栈为队
实现一个MyQueue类,该类用两个栈来实现一个队列。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false说明:你只能使用标准的栈操作 – 也就是只有 push to top, peek/pop from top, size 和 is empty 操作是合法的。你所使用的语言也许不原创 2020-08-16 17:22:37 · 114 阅读 · 0 评论 -
【leetcode】面试题 03.01. 三合一
三合一。描述如何只用一个数组来实现三个栈。你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。构造函数会传入一个stackSize参数,代表每个栈的大小。示例1:输入:[“TripleInOne”, “push”, “push”, “pop”, “pop”, “pop”, “isEmpty”][[1], [0, 1], [0, 2], [0],原创 2020-08-16 17:14:45 · 214 阅读 · 0 评论 -
【leetcode】面试题 02.07. 链表相交
给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如原创 2020-08-16 15:56:38 · 308 阅读 · 0 评论 -
【leetcode】面试题 02.08. 环路检测 题解
给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:tail connects to node index 0解释:链表中有一个环,其尾部连接到第原创 2020-08-16 15:55:59 · 165 阅读 · 0 评论 -
【leetcode】面试题 02.05. 链表求和
给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912进阶:假设这些数位是正向存放的,请再做一遍。示例:输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295输出:9 -> 1原创 2020-08-15 23:24:54 · 221 阅读 · 0 评论 -
【leetcode】面试题 02.04. 分割链表
编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。示例:输入: head = 3->5->8->5->10->2->1, x = 5输出: 3->1->2->10->5->5->8/** * Definition for singly-linked li原创 2020-08-15 23:10:01 · 170 阅读 · 0 评论 -
【leetcode】面试题 02.03. 删除中间节点 题解
实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。示例:输入:单向链表a->b->c->d->e->f中的节点c结果:不返回任何数据,但该链表变为a->b->d->e->f题解/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; *原创 2020-08-15 22:23:47 · 164 阅读 · 0 评论 -
【leetcode】面试题 02.02. 返回倒数第 k 个节点
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。注意:本题相对原题稍作改动示例:输入: 1->2->3->4->5 和 k = 2输出: 4说明:给定的 k 保证是有效的。题解/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x原创 2020-08-15 22:12:12 · 76 阅读 · 0 评论 -
【leetcode】面试题 02.01. 移除重复节点
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[1, 2]提示:链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进阶:如果不得使用临时缓冲区,该怎么解决?题解:/** * Definition for singly-linked list. * public class ListNode { * int原创 2020-08-15 22:05:48 · 133 阅读 · 0 评论 -
【leetcode】面试题 01.08. 零矩阵
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。示例 1:输入:[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2:输入:[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]class Solution { public void setZeroes(int[][] matrix)原创 2020-08-14 20:55:54 · 149 阅读 · 0 评论 -
【leetcode】面试题 01.09. 字符串轮转
字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。示例1:输入:s1 = “waterbottle”, s2 = “erbottlewat”输出:True示例2:输入:s1 = “aa”, s2 = “aba”输出:False提示:字符串长度在[0, 100000]范围内。说明:你能只调用一次检查子串的方法吗?class Solution { public boolean isFli原创 2020-08-14 18:22:28 · 148 阅读 · 0 评论 -
【leetcode】面试题 01.07. 旋转矩阵
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定 matrix =[[ 5, 1, 9,11],[ 2, 4, 8,10],[13, 3, 6, 7],[15,14,12,16]],原地旋转输入矩阵原创 2020-08-14 17:15:17 · 83 阅读 · 0 评论 -
【leetcode】面试题 01.04. 回文排列
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。示例1:输入:“tactcoa”输出:true(排列有"tacocat"、“atcocta”,等等)class Solution { public boolean canPermutePalindrome(String s) { if(s == null || s.length() == 0){原创 2020-08-14 16:22:38 · 106 阅读 · 0 评论 -
【leetcode】面试题 01.06. 字符串压缩
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。示例1:输入:“aabcccccaaa”输出:“a2b1c5a3”示例2:输入:“abbccd”输出:“abbccd”解释:“abbccd"压缩后为"a1b2c2d1”,比原字符串长度更长。class Solution { public String c原创 2020-08-14 16:17:16 · 94 阅读 · 0 评论 -
【leetcode】面试题 01.05.一次编辑
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。示例 1:输入:first = “pale”second = “ple”输出: True示例 2:输入:first = “pales”second = “pal”输出: False题解:class Solution { public boolean oneEditAway(String first, String second) {原创 2020-08-14 16:02:40 · 220 阅读 · 0 评论 -
【leetcode】面试题 01.03. URL化
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)示例1:输入:"Mr John Smith ", 13输出:“Mr%20John%20Smith”示例2:输入:" “, 5输出:”%20%20%20%20%20"提示:字符串长度在[0, 500原创 2020-08-14 15:14:57 · 130 阅读 · 0 评论 -
【leetcode】121. Best Time to Buy and Sell Stock【简单】
Say you have an array for which the ith element is the price of a given stock on day i.If you were only permitted to complete at most one transaction (i.e., buy one and sell one share of the stock), design an algorithm to find the maximum profit.Note tha原创 2020-08-01 23:57:41 · 78 阅读 · 0 评论 -
【leetcode】98. 验证二叉搜索树【中等】题解
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其原创 2020-07-31 10:50:09 · 106 阅读 · 0 评论 -
【leetcode】1. Two Sum【简单】
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the same element twice.Example:Given nums = [2, 7, 11, 15], targ原创 2020-07-30 19:43:04 · 99 阅读 · 0 评论 -
Fibonacci数列
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数。 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结原创 2017-11-06 20:32:24 · 291 阅读 · 0 评论 -
牛客网华为在线训练---提取不重复的整数
题目描述 时间限制:1秒 空间限制:32768K 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。 输入描述: 输入一个int型整数 输出描述: 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数 示例1 输入 9876673 输出 37689思路:用数组下标来表示数据,此下标数组的数值表示是否已经输出过,如果输出就设置为1(初始值为0),我发现原创 2017-08-16 20:22:47 · 269 阅读 · 0 评论 -
牛客网华为在线训练---字符个数统计
题目描述 时间限制:1秒 空间限制:32768K 编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。 输入描述: 输入N个字符,字符在ACSII码范围内。 输出描述: 输出范围在(0~127)字符的个数。 示例1 输入 abc 输出 3思路: 1、这题卡了很久,一开始简单的以为只是判断一下就可以了,后来发现计算字符原创 2017-08-16 21:08:07 · 379 阅读 · 0 评论 -
hiho一下 第161周 树结构判定 题解
题目描述时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述给定一个包含 N 个顶点 M 条边的无向图 G ,判断 G 是不是一棵树。输入 第一个是一个整数 T ,代表测试数据的组数。 (1 ≤ T ≤ 10) 每组测试数据第一行包含两个整数 N 和 M 。(2 ≤ N ≤ 500, 1 ≤ M ≤ 100000) 以下 M 行每行包含两个整数 a 和 b ,表原创 2017-08-02 21:02:55 · 273 阅读 · 0 评论