![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
大鱼qss
阳光的java程序员
展开
-
剑指 Offer 12. 矩阵中的路径
标准的DFS,也可以理解为回溯算法的题目。找到数组中和word首字母相同的元素,开始DFS搜索即可。记得使用一个visited数组来存储路径,避免回头路情况的出现。代码如下:class Solution { int[][] res = new int[][]{{1 ,0} , {0 ,1} ,{-1, 0} ,{0 ,-1}}; public boolean exist(char[][] board, String word) { int h = board.len.原创 2022-05-19 22:11:03 · 87 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串
题目:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"提示:0 <= num < 231典型的动态规划解法,首先需要将数字按位存到数组里,使用的原创 2022-05-14 14:53:48 · 114 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和(动态规划)
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= arr[i] <= 100dp[i] 表示以i结尾的最大子数组,所以状态转移方程:dp[i] = Math.max(dp[i - 1] +原创 2022-05-13 18:39:29 · 232 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序
使用双指针的思路,即使用两个指针指向最后一个单词的开始和结束,然后使用substring() 进行切分,使用一个stringBuilder去存储结果即可。需要注意的点:首先是最后有空格的情况的处理,需要想使i指向最后一个部位空格的字符,这里用倒叙循环解决输出时最后一个字符串后面没有空格的问题,简繁使用一个flag解决,即每次添加单词前先添加空格,但第一个单词前不添加`总体代码如下:class Solution { public String reverseWords(String s.原创 2022-05-13 11:12:32 · 92 阅读 · 0 评论 -
股票最大利润
参考labuladong算法小抄,代码先放这里,留念:class Solution { public int maxProfit(int[] prices) { int n = prices.length; if(n == 0) return 0; int dp_i_0 = 0; int dp_i_1 = -10000; for(int i = 0 ;i < n ;i++) {.原创 2022-05-11 21:32:25 · 94 阅读 · 0 评论 -
(剑指Offer 28). 对称的二叉树
两种思路:思路1建立一个翻转的二叉树newroot ,然后比较两个二叉树是都相同。翻转代码:TreeNode jing(TreeNode root) { if(root == null || (root.left == null && root.right == null)) return root; TreeNode newroot = new TreeNode(root.val); newroot.left.原创 2022-05-10 22:09:46 · 111 阅读 · 0 评论 -
(剑指 Offer 27). 二叉树的镜像
这是一个典型的递归题目,首先看结束条件:如果root为空或者root为单个节点则直接返回该节点。否则定义一个和root val相同的节点newroot;将root节点的左孩子翻转后的结果给newroot右孩子;将root节点的只右孩子翻转后的结果给newroot左孩子;代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * .原创 2022-05-10 21:26:56 · 120 阅读 · 0 评论 -
(剑指 Offer)从上到下打印二叉树 I;从上到下打印二叉树 II
从上到下打印二叉树 I二叉树的层次遍历,一般层次遍历使用队列,思路如下:将树根元素root入队开始循环:每次判断队列是否为空,为空则结束循环不为空执行以下步骤将队头元素出队,将队头val存储;将队头节点的左右孩子入队;代码如下 ans.offer(root); while(!ans.isEmpty()) { TreeNode temp = ans.poll(); res.add(temp.原创 2022-05-10 09:56:22 · 245 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
这个题目看到数据量,我觉得O(n)肯定是可以过的,于是一个简单的线性搜索就出来了。class Solution { public int minArray(int[] numbers) { int n = numbers.length; for(int i = n - 1 ; i > 0 ; i--) { if(numbers[i - 1] > numbers[i]) return num.原创 2022-05-09 12:32:23 · 140 阅读 · 0 评论 -
0~n-1中缺失的数字(超100%)
这个题我们可以使用比较的思想,即我们可以很容易的推出来目标函数是什么样子。目标函数即为 0 - nums.length 共n个数。正好对应数组下标,我们只需要从前向后遍历数组,然后每个数和下标比较。找到第一个与下标不同的第一个数,则缺少的是其下标。代码如下:class Solution { public int missingNumber(int[] nums) { int n = nums.length ; for(int i = 0 ; i < n.原创 2022-05-07 09:48:56 · 289 阅读 · 0 评论 -
和大于等于 target 的最短子数组(三种解法)
和大于等于 target 的最短子数组(三种解法)原创 2022-04-26 22:15:39 · 939 阅读 · 0 评论 -
剑指 Offer II 005. 单词长度的最大乘积(两种做法)
剑指 Offer II 005. 单词长度的最大乘积(两种做法)原创 2022-04-24 11:22:42 · 128 阅读 · 0 评论 -
剑指 Offer II 001. 整数除法(简单题)
剑指 Offer II 001. 整数除法(简单题)原创 2022-04-22 18:32:22 · 278 阅读 · 0 评论