随笔分类 - 算法练习
发表于 2022-03-06 17:28阅读:32评论:0推荐:0
摘要:96. 不同的二叉搜索树 96. 不同的二叉搜索树 // [96. 不同的二叉搜索树](https://leetcode-cn.com/problems/unique-binary-search-trees/) // n个整数-> 每个整数都可以作为根节点 for(i: n)-> [1, i-1]左
阅读全文 »
发表于 2022-03-06 17:22阅读:37评论:0推荐:0
摘要:343. 整数拆分 343. 整数拆分 class Solution { // 解决这一类问题的入手点就是从小数字进行模拟: 比如 n = 2, 2 = 1 + 1, => n = 3, 2 + 1 = 3到这里地方再思考 // 2要不要拆分呢, 取决于2本身了, 这样就将问题 3 转化到问题 2(
阅读全文 »
发表于 2022-03-06 17:10阅读:38评论:0推荐:0
摘要:62.不同路径 62.不同路径 // 动态规划清晰步骤: 1. 定义dp数组 2. 初始化 3. 循环填充 4. 返回结果 class Solution { // 也是一个从起点到终点的问题, 1) dp[i][j],表示i,j格子的不同路径数, 2) dp[0][0] = 1 dp[0][1] =
阅读全文 »
发表于 2022-03-06 16:54阅读:32评论:0推荐:0
摘要:70. 爬楼梯 70. 爬楼梯 // 根斐波那契数列一样 class Solution { public int climbStairs(int n) { if (n == 1) { return 1; } if (n == 2) { return 2; } int[] dp = new int[n
阅读全文 »
发表于 2022-03-06 16:32阅读:31评论:0推荐:0
摘要:509. 斐波那契数 509. 斐波那契数 // [509. 斐波那契数](https://leetcode-cn.com/problems/fibonacci-number/) // 动态规划: 1) 确定DP数组 使用一维数组dp[i]表示第i个数字, 2) 确定递推公式 3) 确定初始状态 4
阅读全文 »
发表于 2022-02-18 23:07阅读:153评论:0推荐:0
摘要:思路 螺旋矩阵1,2: 1) 按顺时针方向模拟 定义方向=> 初始方向递进, 遇到转折点变换方向, 遍历全部元素 2) 按层模拟: 确定层数 ⇒ 处理层 ⇒ 处理非圈 题解 // [54. 螺旋矩阵](https://leetcode-cn.com/problems/spiral-matrix/)
阅读全文 »
发表于 2022-02-14 18:14阅读:27评论:0推荐:0
摘要:203. 移除链表元素 203. 移除链表元素 链表删除操作: 使用dummyHead, 遍历cur.next值是否等于val, 再执行删除操作, 使用while (cur.next != null) 循环 递归方法: 递归可以方便的进行重建链表, 重建过程中删除等于val就满足了条件。 //增加虚
阅读全文 »
发表于 2022-02-13 14:50阅读:28评论:0推荐:0
摘要:模拟过程-螺旋矩阵2 螺旋矩阵2 模拟遍历过程, 要按照外圈到内圈进行循环, 考虑奇数偶数不同。 题解 public class Solution { public int[][] generateMatrix(int n) { // 定义循环的偏移起点,循环次数 int startX = 0, s
阅读全文 »
发表于 2022-02-13 13:35阅读:39评论:0推荐:0
摘要:长度最小的子数组 滑动窗口-长度最小的子数组 暴力法: 区间由left, 和right确定, 因此需要两层for循环遍历left和right, O(n^2) 滑动窗口法: 滑动窗口也是使用双指针确定窗口的left和right, left和right如何移动?, right要从0 到length -
阅读全文 »
发表于 2022-02-13 00:48阅读:27评论:0推荐:0
摘要:有序数组的平方 有序数组的平方 暴力法: 平方后排序 首尾指针: 1)首尾指针元素选取平方的最大值添加入新数组, 对应指针移动, 循环是while(left ⇐ right) 题解 //双指针法(首尾指针法):时间复杂度O(n),空间复杂度O(n) class Solution { public i
阅读全文 »
发表于 2022-02-12 18:33阅读:79评论:0推荐:0
摘要:移除元素 移除元素 暴力解法: 1)遍历所有元素 2)遇到符合条件元素进行移除, 通过for循环将后序元素向前覆盖。 双指针可以通过一次for循环完成两个for循环的任务, 有快慢指针(两个指针从索引0开始移动,但是移动速度不同)for循环实现, 首尾指针(一个指针从0往后移动一个指针从后往0移动)
阅读全文 »
发表于 2021-12-19 16:37阅读:40评论:0推荐:0
摘要:二叉树深度优先遍历和层次遍历 public class Basic { public static class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() { } TreeNode(int val) { this.val
阅读全文 »
发表于 2021-12-19 01:15阅读:34评论:0推荐:0
摘要:二分搜索法 这算得上是简单的一种算法了, 对有序序列进行二分查找,重点是注意边界值。 写关于边界值的问题最好通过模拟, 比如: [1, 2], 两个元素, left = 0, right = 1, mid = (right + left) / 2 = 0 nums[mid] = 1 ⇒ search
阅读全文 »
发表于 2021-12-18 22:07阅读:164评论:0推荐:0
摘要:三大排序算法: 快速排序, 堆排序, 归并排序 912. 排序数组 冒泡排序: 10个数字,需要9次循环,每次排序出一个最大值,最后一个元素自动排序. 快速排序 建立基准pivot,根据基准左右分割进行排序 堆排序 构建二叉树,保持父节点数值总是大于等于子节点的数值, 可以直接使用原数组构建树结构,
阅读全文 »
发表于 2021-09-26 23:51阅读:71评论:0推荐:1
摘要:110.平衡二叉树 题目链接 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 思路 递归三要素 确定参数和返回值 递归中止条件 递归逻辑部分 二叉树的深度优先遍历 二叉树的深度优先遍历有左中右三种,
阅读全文 »
发表于 2021-09-07 13:20阅读:35评论:0推荐:0
摘要:要求 指定数组中两数之和与目标值相等 示例: {1,2,3,4,5},目标值 5 程序返回结果的下标[1,2] 代码 public class Solution1 { public int[] twoSum(int[] nums, int target) { HashMap<Integer,Inte
阅读全文 »
发表于 2021-09-05 17:07阅读:113评论:0推荐:0
摘要:atoi函数的实现-java 要求:输入字符串,提取最前面的数字部分,并转换为int型 示例:" -42 world" 输出:-42 代码思路: 先提取出-42,在转换-42为int,并判断范围 public int myAtoi(String str){ //提取的数字字符串 StringBuil
阅读全文 »
发表于 2021-09-05 17:06阅读:172评论:0推荐:0
摘要:10.正则表达式匹配 要求:给定一个字符串 (s) 和一个字符模式 (p)。实现支持 '.' 和 '*' 的正则表达式匹配。 '.' 匹配任意单个字符。 '*' 匹配零个或多个前面的元素 示例: 输入: s = "mississippi" p = "mis*is*p*." 输出: false 代码思
阅读全文 »
发表于 2020-04-03 01:02阅读:110评论:0推荐:0
摘要:"题目连接" 题目描述 我们可以用2 1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2 1的小矩形无重叠地覆盖一个2 n的大矩形,总共有多少种方法? 题目思路 递推公式: f(n)=f(n 1)+f(n 2)(n 2) f(0)=0,f(1)=1,f(2)=2 Python代码 使用递归,运行时
阅读全文 »