算法
文章平均质量分 75
在路上的德尔菲
这个作者很懒,什么都没留下…
展开
-
【算法练习】高频「双指针」类型题目总结
题目一原创 2021-07-18 23:44:30 · 389 阅读 · 3 评论 -
【算法练习】「广度优先搜索」类型题目总结
题目一:二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:输入:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7输出:[ [3], [9,20], [15,7]]题解:层序遍历符合先进先出模型(FIFO),所以适合使用队列。注意需要2次循环,外循环是判断总体是否还有节点,内循环判断每一层是否还有节点。另外用size– 的方式相比使原创 2021-06-26 22:26:36 · 790 阅读 · 0 评论 -
【算法每日练习】高频常考「位运算」题目总结
题目一:只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。输入: [2,2,1]输出: 1输入: [4,1,2,1,2]输出: 4解题相同的数字相异或会为0,遍历异或所有元素,最后得到的结果为只出现一次的数字 public static int getOnceNumber(int[] input) { int length = input.length; int res = 0;原创 2021-06-05 23:52:16 · 169 阅读 · 1 评论 -
【每日算法练习】环形链表
题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。示例输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接到第二个节点。解题使用HashSet p原创 2021-05-30 11:34:44 · 94 阅读 · 0 评论 -
【5.28算法练习】用队列实现栈#队列#栈
题目请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。示例输入:[“MyStack”, “push”, “push”, “top”, “pop”, “empty”][原创 2021-05-29 22:54:11 · 166 阅读 · 0 评论 -
【5.24算法练习】三角形最小路径和#动态规划
题目给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。示例示例一输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]输出:11解释:如下面简图所示:23 46 5 74 1 8 3自顶向下的最小路径和为 1原创 2021-05-25 23:29:06 · 136 阅读 · 0 评论 -
【5.23算法练习】最长重复子数组#动态规划
题目给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。解题和上一篇文章《最长公共子序列》异曲同工之妙,如果没有读建议先去读上一篇文章。伪代码如下if(text1[i] == text2[j]){ dp[i][j] = dp[i-1][j-1] + 1;}else{ dp[i][j] = 0;}根据伪代码可以画出下面的表格,原创 2021-05-23 22:09:03 · 167 阅读 · 0 评论 -
【5.23算法练习】最长公共子序列
题目给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例输入:text1 = “abcde”, text2 = “ace”原创 2021-05-23 21:21:20 · 290 阅读 · 0 评论 -
【5.16算法每日练习】二叉树中最大路径和
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6public class MaxPathSum124 { private static int原创 2021-05-17 09:44:45 · 459 阅读 · 0 评论 -
【5.16算法练习】相交链表
找到两个单链表相交的起始节点,如下图节点3为相交的起始节点如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。public class IntersectionLinkedLists160 { /** * 方法0 :暴力解法 * 时间复杂度O(mn) * 空间复杂度O(1) * */ public static Lis原创 2021-05-17 09:44:03 · 78 阅读 · 0 评论 -
【算法总结】二叉树常见算法题目及解题思路汇总
二叉树算法总结主要解决思路:递归自底向上分治栈或队列常见算法题二叉树结构定义如下 public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }1、前序遍历 LeetCode144给定一个二叉树,返回它的 前序 遍历。递归解法public List<Integer> preorderTraversal(原创 2021-05-09 22:39:38 · 831 阅读 · 0 评论