剑指offer
待别三日
这个作者很懒,什么都没留下…
展开
-
【leetcode】剑指 Offer 10- II. 青蛙跳台阶问题
题目描述 题目连接剑指 Offer 10- II. 青蛙跳台阶问题 题解 此题跟斐波那契数列一样,利用动态规划的思想。 dp[n]的意义,上第n级台阶有多少种方法 设置初值dp[0] = 1, dp[1] = 1 递推公式:因为一次能上一级台阶或者两级台阶。所以dp[n] = dp[n - 1] + dp[n - 2] 因为dp[n]只与前两个数字有关,可以进行空间优化 class Solution { public int numWays(int n) { if (n <原创 2021-12-28 14:14:25 · 235 阅读 · 0 评论 -
【leetcode】剑指 Offer 04. 二维数组中的查找
题目描述 题目连接剑指 Offer 04. 二维数组中的查找 题解 仔细观察矩阵规律。我们可以从左上角开始对比。 从左上角开始对比,cur 如果target比当前值大,cur下移 如果target比当前值小,cur左移 越过边界则返回false class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { if (matrix.length == 0) return false原创 2021-12-28 14:08:31 · 3094 阅读 · 0 评论 -
【leetcode】剑指 Offer 03. 数组中重复的数字
题目描述 题目连接剑指 Offer 03. 数组中重复的数字 题解 归位法,长度为n,并且所有数字都是在0到n-1之间。 长度为n,并且所有数字都是在0到n-1之间。我们把所有的的数字进行归位。比如当nums[i] == 1的时候,我们把它放在第1个位置,当nums[i] == 2的时候,我们把它放在第2个位置… 详见代码注释。 class Solution { public int findRepeatNumber(int[] nums) { //遍历nums中每个数字原创 2021-12-28 14:00:25 · 3089 阅读 · 0 评论 -
【leetcode】剑指 Offer 09. 用两个栈实现队列
题目描述 题目连接剑指 Offer 09. 用两个栈实现队列 题解 队列是先进先出的。栈是先进后出的,也就是说可以用栈实现反序。那么我们就可以用两个栈,实现两次反序,就变成先进先出的了。 创建两个栈,s1负责入栈,s2负责出栈 入栈时,直接加入s1栈顶 出栈时,如果s2不为空的话,直接输出s2栈顶。如果s2为空的话,把s1中的元素都加入到s2之中,再输出。 class CQueue { Deque<Integer> s1; Deque<Integer> s2;原创 2021-12-28 13:47:38 · 87 阅读 · 0 评论 -
【leetcode】剑指 Offer 10- I. 斐波那契数列
题目描述 题目连接:剑指 Offer 10- I. 斐波那契数列 题解: 动态规划思想 初值:f0 = 0, f1 = 1 递推公式:f (n) = f (n - 1) + f (n - 2) 由于f (n)只和前两个有关,所以可以利用三个变量来进行空间优化 class Solution { public int fib(int n) { if (n <= 1) return n; int a = 0, b = 1, c = 0; for原创 2021-12-28 13:35:39 · 270 阅读 · 0 评论 -
【leetcode】剑指 Offer 40. 最小的k个数(Java)
题目描述 题目连接剑指 Offer 40. 最小的k个数 题解 快速排序: 我们知道快速排序的每一轮,都是找到一个数应该在的位置,左边都是比他小的,右边都是比他大的。所以我们进行快排,当当前坐标等于k - 1的时候,左边的数组就是前k小的数 class Solution { public int[] getLeastNumbers(int[] arr, int k) { return quick(arr, k, 0, arr.length - 1); } publ原创 2021-11-15 20:18:21 · 438 阅读 · 0 评论 -
【leetcode】剑指 Offer 36. 二叉搜索树与双向链表(Java)
题目描述 题目链接剑指 Offer 36. 二叉搜索树与双向链表 题解 中序遍历: pre记录前一个节点,cur记录当前节点 当pre != null 时, pre.right = cur , cur.left = pre 我们还需要记录头节点和尾节点,把链表变成循环链表 当pre == null的时候,当前cur就是头节点 当遍历结束时, pre所指向的就是最后一个节点,直接连接就可以,详见代码注释 class Solution { Node cur = null; Node pre原创 2021-11-11 19:52:38 · 599 阅读 · 0 评论 -
【leetcode】剑指 Offer 54. 二叉搜索树的第k大节点(Java)
题目描述 题目连接剑指 Offer 54. 二叉搜索树的第k大节点 题解 中序遍历: 二叉搜索树中序遍历是从小到大。先遍历右子树,再遍历左子树,就变成从大到小了。用target计数,target等于0时,就是我们要找的第K大节点 class Solution { int res = 0; int target = 0; public int kthLargest(TreeNode root, int k) { target = k; dfs(root原创 2021-11-12 19:50:30 · 349 阅读 · 0 评论 -
【leetcode】剑指 Offer 22. 链表中倒数第k个节点(Java)
题目描述 题解 快慢指针,想知道倒数第k个,我们就让快指针先走k步,然后慢指针在开始走,当快指针走到最后的时候,这时慢指针所指的,就是倒数第K个节点。 class Solution { public ListNode getKthFromEnd(ListNode head, int k) { ListNode fast = head, slow = head; for (int i = 0; i < k; i++){ fast = fa原创 2021-11-01 14:38:55 · 49 阅读 · 0 评论