随笔分类 - 数据结构与算法
LeetCode刷题记录,根据题目类型分篇进行保存
摘要:动态规划 动归五部曲 一、确定dp数组以及下标的含义 二、确定递推公式 三、dp数组进行初始化 四、确定遍历顺序 五、举例推导dp数组 746. 使用最小花费爬楼梯 解决思路 定义dp[i] 为爬到第i个台阶的最低花费 递推公式。因为每一次能爬一步或两步,dp[i] 为前面的两格走两步过来或走一步过
阅读全文
摘要:堆 215. 数组中的第K个最大元素 解法一 思路 使用堆排序,可以使用O(nlogN)找到前k个元素 先建立大顶堆,堆顶元素即为最大值。循环将最大值移除数组,并调整剩下元素的堆。循环k-1次后,第0个元素即是第k大的值 建立大顶堆 性质:根节点大于左右子树 maxHeapify操作:自上向下,调整
阅读全文
摘要:图 200. 岛屿数量 思路 遍历二维数组,遇到等于1的进行计算。同时修改同岛的位置为0,避免重复计算 遍历同岛的位置,可以采用dfs深度优先搜索 代码 char[][] g; public int numIslands(char[][] grid) { int sum = 0; g = grid;
阅读全文
摘要:树 105. 从前序与中序遍历序列构造二叉树 思路 先序遍历中,树的根节点放在第一位,后面是左右子树。中序遍历中,树的根节点放在中间,两边分为左右子树 可基于以上规则区分出每棵树在数组中的区间 先从先序数组中拿到根节点的val 因为val不重复,定位到该树在中序数组的位置 中序数组根节点位置确定,可
阅读全文
摘要:栈与队列 232. 用栈实现队列 思路 使用两个栈 一个栈负责队列的push存元素,将里面的元素pop后放在另外一个栈。此时,另外一个栈最上面的就是最先放入,可用来做队列的pop 代码 public MyQueue() { pushSt = new Stack<>(); popSt = new St
阅读全文
摘要:链表 707. 设计链表 解题思路 参考官方的单向链表,设置一个成员变量作为虚拟头节点,一个成员变量size保存有效节点数 代码 public MyLinkedList() { size = 0; head = new ListNode(0); } public int get(int index)
阅读全文
摘要:704. 二分查找 解决思路 基于数组有序的特性,取其中一个值进行比较,即可淘汰该值左边或右边的元素,缩小搜索的区间 使用两指针标记需要遍历的区间,取中间值进行比较,淘汰左边或右边元素,不断移动缩小遍历的区间,即可查到 代码 public int search(int[] nums, int tar
阅读全文
摘要:146. LRU缓存机制 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。 获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。 写入数据 pu
阅读全文
摘要:###46. 全排列 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] solution1 class Solution { List<L
阅读全文
摘要:###416. 分割等和子集 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5
阅读全文
摘要:### 1143. 最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,"ace" 是 "abcd
阅读全文
摘要:743. 网络延迟时间 有 N 个网络节点,标记为 1 到 N。 给定一个列表 times,表示信号经过有向边的传递时间。 times[i] = (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的时间。 现在,我们从某个节点 K 发出一个信号。需要多久才
阅读全文
摘要:62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 例如,上图是一个7 x 3 的网格。有多少可能的路径? 示例 1
阅读全文
摘要:69. x 的平方根 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842...,
阅读全文
摘要:455. 分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这
阅读全文
摘要:###102. 二叉树的层序遍历 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ] //
阅读全文
摘要:###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
阅读全文
摘要:###70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶 示例 2: 输入: 3 输出
阅读全文
摘要:###94. 二叉树的中序遍历 给定一个二叉树,返回它的中序 遍历。 示例: 输入: [1,null,2,3] 1 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? //中序遍历 必会 //两个思路 递归、栈 //第三种方法 颜色标记法 来及网友Henry //
阅读全文
摘要:###242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1: 输入: s = "anagram", t = "nagaram" 输出: true 示例 2: 输入: s = "rat", t = "car" 输出: false 说明:
阅读全文

浙公网安备 33010602011771号