![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指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 · 230 阅读 · 0 评论 -
【leetcode】剑指 Offer 04. 二维数组中的查找
题目描述题目连接剑指 Offer 04. 二维数组中的查找题解仔细观察矩阵规律。我们可以从左上角开始对比。从左上角开始对比,cur如果target比当前值大,cur下移如果target比当前值小,cur左移越过边界则返回falseclass Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { if (matrix.length == 0) return false原创 2021-12-28 14:08:31 · 3091 阅读 · 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 · 3077 阅读 · 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 · 84 阅读 · 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 · 266 阅读 · 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 · 427 阅读 · 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 · 585 阅读 · 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 · 347 阅读 · 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 · 48 阅读 · 0 评论