leetcode
suyongcai1234
这个作者很懒,什么都没留下…
展开
-
【动态规划】【leetcode152】乘积最大子数组
遍历一次:维持当前最大乘积imax和最小乘积imin,当出现负数时,当前最大乘积和当前最小乘积交换,imax = Math.max(imax * nums[i], nums[i]);imin = Math.min(imin * nums[i], nums[i]);max = Math.max(max, imax);/** * 动态规划 */public class Solut...原创 2020-05-06 10:13:48 · 257 阅读 · 0 评论 -
【N皇后问题】【leetcode51】(Java)
【N皇后问题】【leetcode51】问题描述八皇后问题,一个古老而著名的问题,是回溯算法的典型案例。该问题由国际西洋棋棋手马克斯·贝瑟尔于 1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有 76 种方案。1854 年在柏林的象棋杂志上不同的作者发表了 40 种不同的解,后来有人用图论的方...原创 2020-04-07 19:01:09 · 229 阅读 · 0 评论 -
【栈】栈的压入、弹出序列(Java)
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的解题依次将元素按顺序压入序列,每次判断栈顶元素是否等于序列中的第 index个元素,如...原创 2020-03-31 22:30:15 · 112 阅读 · 0 评论 -
【栈】包含min最小值的栈 (Java)
简单双栈实现增加一个minStack 用以维持 此时的最小值,每次push进栈的同时,将将此时的最小值push到minStack中;同时出栈也将minStack 也出栈。/** * 双栈实现 * 空间复杂度 O(n) */import java.util.Stack;public class Solution { Stack<Integer> minSta...原创 2020-03-31 19:16:09 · 161 阅读 · 0 评论 -
【二叉树】 二叉树的子树 && 二叉树的子结构(Java)
二叉树的子树判断一个树是否为另一个大的树的子树public class Solution { public boolean HasSubtree(TreeNode root1, TreeNode root2){ if(root2 == null) return false; if(root1 == null) ...原创 2020-03-30 22:10:04 · 232 阅读 · 0 评论 -
【链表】链表反转 (Java)
链表反转利用两个指针 pre 和 cur 分别表示当前遍历到的节点的前一个节点 和 当前遍历到的节点,每次对节点的操作是cur.next = pre将两个指针同时往后移动,注意 这里不能直接用cur = cur.next;pre = pre.next因为 cur.next 已经是 pre节点正确做法ListNode tmpCur = cur.next;cur.next = pre...原创 2020-03-30 16:15:49 · 111 阅读 · 0 评论 -
【链表】返回链表倒数第k个结点(Java)
快慢双指针双指针 pre 和 post 分别指向 当前遍历结点 和 当前往后数 k 个节点,当post节点到达链表最后一个节点时,此时的pre 即为倒数第 k个节点。public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(k < 1) r...原创 2020-03-30 15:48:56 · 399 阅读 · 0 评论 -
原码、反码、补码 : 你想了解的,都在这里了!!!(Java)
计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同 。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。Java 中整数类型一共有四种,分别是 byte, short, int, long。分别占据8位...原创 2020-03-30 14:03:18 · 296 阅读 · 0 评论 -
【二叉树】由前序遍历和中序遍历构造二叉树(Java)
【二叉树】由前序遍历和中序遍历构造二叉树递归if(preorder.length != inorder.length) return null; if(preorder.length == 0) return null; if(preorder.length == 1) return new...原创 2020-03-29 21:55:51 · 297 阅读 · 0 评论 -
【二叉树】层次遍历
【二叉树】层次遍历记录size来维持public List<List<Integer>> levelOrder(TreeNode root){ if(root == null) return new ArrayList<List<Integer>>(); Queue<TreeNode&...原创 2020-03-25 15:40:11 · 93 阅读 · 0 评论 -
【二叉树】完美二叉树
【二叉树】完美二叉树完美二叉树 (Perfect Binary Tree)A Perfect Binary Tree(PBT) is a tree with all leaf nodes at the same depth. All internal nodes have degree 2.一个深度为k(>=-1)且有2^(k+1) - 1个结点的二叉树称为完美二叉树完全二叉树 (...原创 2020-03-25 14:03:35 · 2063 阅读 · 0 评论 -
【动态规划】【贪心算法】leetcode376 摆动序列(Java)
【动态规划】【贪心算法】leetcode376 摆动序列题目详情暴力法(递归)动态规划** * 动态规划 * 时间复杂度O(n^2) */public class Solution { public int wiggleMaxLength(int[] nums){ if(nums.length < 2) return num...原创 2020-03-20 22:15:56 · 234 阅读 · 0 评论 -
【数组】leetcode80删除排序数组中的重复项Ⅱ(Java)
【数组】leetcode80 删除排序数组中的重复项Ⅱ(Java)题目详情暴力法/** * 时间复杂度O(n^2) */public class Solution { public int removeDuplicates(int[] nums){ if(nums.length < 3) return nums.length;...原创 2020-03-20 10:40:46 · 118 阅读 · 0 评论 -
【二叉树】leetcode104二叉树的最大深度(Java)
【二叉树】leetcode104 二叉树的最大深度题目详情递归/*** * 二叉树的最大深度 * 时间复杂度O(n) * 空间复杂度O(n) */public class Solution { public int maxDepth(TreeNode root){ if(root == null) return 0; ...原创 2020-03-19 22:57:36 · 196 阅读 · 0 评论 -
【贪心算法】leetcode122 买卖股票的最佳时机Ⅱ(Java)
【贪心算法】leetcode122 买卖股票的最佳时机Ⅱ题目详情暴力法(递归)/** * 暴力法 * 时间复杂度O(n^n) */public class Solution { public int maxProfit(int[] prices){ return helper(prices, 0); } private int help...原创 2020-03-19 19:54:55 · 245 阅读 · 0 评论 -
【贪心算法】leetcode134 加油站(Java)
leetcode134 加油站题目详情题目解析解法一遍历每一个加油站作为起始点,判断是否能完成环绕行驶一周,记录当前油箱中所剩余的油量,若当前油箱小于零,则遍历下一个加油站。public class Solution { public int canCompleteCircuit(int[] gas, int[] cost) { if(cost.length ...原创 2020-03-19 15:05:42 · 265 阅读 · 0 评论 -
【动态规划】leetcode279 完全平方数(Java)
【动态规划】leetcode279 完全平方数题目详情动态规划dp[i] = Math.min(dp[i], dp[i - j * j] + 1)/*** * 动态规划 * dp[i] = Math.min(dp[i], dp[i - j * j] + 1) */public class Solution { public int numSquares(int n){...原创 2020-03-18 22:49:37 · 350 阅读 · 3 评论 -
【动态规划】leetcode221最大正方形(Java)
【动态规划】leetcode221 最大正方形题目详情代码实现public class Solution { public int maximalSquare(char[][] matrix){ if(matrix.length == 0) return 0; if(matrix.length == 1) { ...原创 2020-03-18 21:00:04 · 194 阅读 · 0 评论 -
【动态规划】leetcode120 三角形最小路径和
【动态规划】leetcode120 三角形最小路径和题目详情dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j]) + nums[i][j]/** * 动态规划 */public class Solution { public int minimumTotal(List<List<Integer>> trian...原创 2020-03-15 16:18:22 · 132 阅读 · 0 评论 -
【动态规划】leetcode85最大矩形 (Java)
【动态规划】leetcode85 最大矩形(Java)题目详情题目解析动态规划设置动态规划数组 dp[][] 数组中的元素表示 grid[i][j] 为1 时其右侧连续1的数目,然后向上寻找能形成的矩形的面积。width = dp[i][j];for(int k = i; k >= 0; k --){ if(dp[k][j] == 0) break; ...原创 2020-03-15 16:04:51 · 335 阅读 · 0 评论 -
【BFS 广度优先遍历】leetcode695岛屿的最大面积(Java)
【BFS广度优先遍历】leetcode695 岛屿的最大面积(Java)题目详情题目解析本题采用广度优先遍历,以每一个元素作为根节点进行广度优先遍历,取最大值作为最终结果。为了避免一个元素被遍历多次,元素被遍历之后设置成0。递归/** * 广度优先遍历(递归) */public class Solution2 { public int maxAreaOfIsland(i...原创 2020-03-15 15:49:48 · 258 阅读 · 0 评论 -
【动态规划】leetcode91 解码方法(Java)
【动态规划】leetcode91 解码方法(java)题目详情题目解析定义dp 数组,dp[i] 用以表示字符串 s 从0 到 i 的子字符串的解码方式的总数,当求解dp[i] 时 考虑当前位置s.charAt(i) 和 dp[i - 1] dp[i - 2];一共有以下几种情况:s.charAt(i) == ‘0’ : 若出现连续两个0 则返回 0; 否则 dp[i] = dp[...原创 2020-03-14 23:19:27 · 187 阅读 · 0 评论 -
【动态规划】leetcode300 最长上升子序列(Java实现)
leeetcode300 最长上升子序列(Java)题目详情题目解析看到题目寻找最长上升子序列时,首先想到需要枚举所有子序列,但是这样直接枚举时间复杂度相对较高,因此,我们想到能不能利用动态规划进行求解。根据动态规划的三个要素:重叠子问题: 求解问题时要遍历数组,当前数组为 i 时,此时的最长子上升子序列与 i - 1 时有关,因此包含重叠子问题。最优子结构: 最长子序列的长度存在,...原创 2020-03-14 23:05:05 · 282 阅读 · 0 评论 -
leetcode31 下一个排列(java)
leetcode31 下一个排列题目详情题目分析字典序在数学中,字典或词典顺序(也称为词汇顺序,字典顺序,字母顺序或词典顺序)是基于字母顺序排列的单词按字母顺序排列的方法。 这种泛化主要在于定义有序完全有序集合(通常称为字母表)的元素的序列(通常称为计算机科学中的单词)的总顺序。对于数字1、2、3…n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。例如对于5个数字...原创 2020-03-13 20:30:38 · 151 阅读 · 0 评论 -
leetcode1071 字符串的最大公因子
leetcode1071 字符串的最大公因子题目详情题目解析解法一 : 暴力法定义函数 boolean isgcdOfString(String str, String gcd) 用来 str 是否能被 gcd 整除定义函数 Set< String> divOfString(String str) 返回所有能整除字符串 str 的字符串对两个字符串 str1 和 str...原创 2020-03-13 13:23:30 · 313 阅读 · 0 评论 -
leetcode139 单词拆分
leetcode139 单词拆分题目详情题目解析递归(有记忆递归)根据题目可以试想,如果确定字符串前 i 个字符能是wordDict中的单词,那么只要半段第 i 个 字符以后的字符串是否能够拆分即可。因此可以采用递归的方式进行穷举。为了能够更快的查找到wordDict是否包含字符串,可以将wordDict 转换成HashSet。直接进行递归的时间复杂度为 O(n^n)递归过程中会产...原创 2020-03-13 13:05:24 · 140 阅读 · 0 评论 -
leetcode124二叉树的最大路径和
leetcode124 二叉树的最大路径和题目详情Java代码public class Solution { private static int max = Integer.MIN_VALUE; public int maxPathSum(TreeNode root){ helper(root); return max; } ...原创 2020-03-11 22:38:13 · 119 阅读 · 0 评论 -
leetcode128最长连续序列
leetcode128 最长连续序列题目详情先排序方法public class Solution { public int longestConsecutive(int[] nums){ if(nums.length < 2) return nums.length; Arrays.sort(nums); ...原创 2020-03-11 22:34:46 · 199 阅读 · 0 评论 -
leetcode114二叉树展开为链表
leetcode114 二叉树展开为链表题目详情题目解析(递归)将左子树转化为链表,并插入到右子树的位置将原来的右子树转化为链表,并插入到新插入的右子树后面将左子树置为null 1 / \ 2 5 / \ \3 4 6//将 1 的左子树插入到右子树的地方 1 \ 2 5 / \ ...原创 2020-03-11 13:35:43 · 167 阅读 · 0 评论 -
leetcode1013将数组分成相等的三部分
leetcode1013将数组分成相等的三部分题目详情题目解答public class Solution { public boolean canThreePartsEqualSum(int[] A){ int sum = sum(A, 0, A.length); if(sum % 3 != 0) return false;...原创 2020-03-11 12:14:54 · 267 阅读 · 0 评论 -
leetcode438 找到字符串中所有字母异位词 &通用滑动窗口解法
leetcode438 找到字符串中所有字母异位词题目详情本题解法public class Solution { public List<Integer> findAnagrams(String s, String p){ if(s.length() < p.length()) return new ArrayList<...原创 2020-03-10 21:36:26 · 304 阅读 · 0 评论 -
leetcode543二叉树的直径
leetcode543 二叉树的直径题目详情定义:二叉树的直径给定一个二叉树,二叉树的直径长度为任意两个节点路径长度的最大值。定义:二叉树的深度二叉树的深度为:从根节点到达叶子节点的最大路径长度,路径长度是指从根节点到达叶子节点的经过的节点的个数。题目解析根据题目我们可以发现求解二叉树的直径和求解二叉树的深度有相似之处,二叉树的深度为左子树的最大深度 L 加上右子树的最大深度 R ...原创 2020-03-10 14:13:25 · 120 阅读 · 0 评论 -
leetcode105从前序与中序遍历序列构造二叉树(Java实现)
leetcode105从前序与中序遍历序列构造二叉树题目详情题目分析首先由前序遍历的性质可以得出,前序遍历序列的第一个数即为二叉树的根节点,通过根节点在中序遍历中查找根节点的位置,中序遍历序列中,根节点左侧为左子树的中序遍历,右侧为右子树的中序遍历。根据左子树的节点个数可以在前序遍历序列中找出左右子树的分界点,然后利用递归方法,生成左右子树。public class Solution2 ...原创 2020-03-09 16:10:47 · 515 阅读 · 0 评论 -
leetcode121 买卖股票的最佳时期
leetcode121 买卖股票的最佳时期题目详情题目解析暴力法对每一种买卖股票的可能进行穷举,然后求最大的profit时间复杂度 O(n^2)public int maxProfit(int[] prices){ if(prices.length == 0) return 0; int maxProfit = Integer....原创 2020-03-09 14:37:10 · 93 阅读 · 0 评论 -
leetcode102层次遍历
leetcode102 层次遍历题目详情题目解析本题为二叉树的层次遍历,并且能记录树的每层元素。利用队列依次将root的左右子树压入队列,为了能够分解层次信息,我们利用三个指针front. rear, level_idx 分别代表当前遍历的元素,当前队列对位元素,以及下一层起始元素。public List<List<Integer>> levelOrder(Tre...原创 2020-03-08 23:11:08 · 107 阅读 · 0 评论 -
动态规划步骤详解
动态规划步骤详解本文参考链接:https://leetcode-cn.com/problems/coin-change/solution/dong-tai-gui-hua-tao-lu-xiang-jie-by-wei-lai-bu-ke/来源:力扣(LeetCode)动态规划本质上就是一个求最优解的问题,为了能求最优解,直观的方法是把所有的解都穷举出来,然后寻找最优解。看似简单粗暴,...转载 2020-03-08 22:36:56 · 472 阅读 · 0 评论 -
leetcode994腐烂的橘子
leetcode994 腐烂的橘子题目描述题目解析深度优先遍历问题,需要利用队列来存取需要遍历的节点,同时为了维护遍历深度,需要维护一个字典来存取遍历深度public int orangesRotting(int[][] grid){ int[] dr = {-1, 1, 0, 0}; int[] dc = {0, 0, -1, 1}; i...原创 2020-03-06 22:33:15 · 174 阅读 · 0 评论 -
leetcode面试题57 - Ⅱ 和为s的连续正整数序列
leetcode面试题57 - Ⅱ 和为s的连续正整数序列题目描述题目解析由于所有解均为连续序列,因此可以用滑动窗口进行求解(即双指针法),维护两个指针 left 和 right ,当 sum < target 时 向右移动指针 right ,当sum > target时向右移动指针 left 知道sum < = target 。class Solution { ...原创 2020-03-06 10:34:41 · 242 阅读 · 0 评论 -
leetcode196 & leetcode337 打家劫舍
leetcode196 打家劫舍题目描述题目详解:动态规划由题目可知:当nums.length == 0时,输出为0;当nums.length == 1时,输出为nums[0];当nums.length == 2时,输出为max(nums[0], nums[1])当nums.leng == 3时,有两种选择,一是不选择nums[2] 则最大偷窃金额为res[1],二是选择nums[...原创 2020-03-06 09:39:44 · 129 阅读 · 0 评论 -
leetcode98 验证二叉搜索树
leetcode98 验证二叉搜索树题目描述题目解析二叉搜索树不仅要求左孩子节点小于root,右孩子节点大于root,而且还要求左子树中所有节点都小于root,右子树中所有节点都大于root,这是难点中序遍历方法由二叉搜索树的性质可知,对二叉搜索树进行中序遍历能够得到一个递增的有序序列,所以利用中序遍历的方法,如果发现所遍历的节点不服从递增,则返回不是二叉搜索树。/*** ...原创 2020-03-05 22:47:02 · 112 阅读 · 0 评论