
LeetCode
dan_zhoudan
研究生阶段
展开
-
LeetCode动态规划专题
第一题 LeetCode53. 最大子序和https://leetcode-cn.com/problems/maximum-subarray/1、题目描述给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。2、分析(1)暴力思考方法枚举每一个起点和每一个终点,获得每一个子序列的和,求最大...原创 2020-07-29 08:59:42 · 198 阅读 · 0 评论 -
LeetCode 面试题 02.05. 链表求和 - 思路超好理解
1、题目描述面试题 02.05. 链表求和难度中等26给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912进阶:假设这些数位是正向存放的,请再做一遍。示例:输入:(6 -> 1 -> 7).原创 2020-07-22 10:41:31 · 377 阅读 · 0 评论 -
滑动窗口的最大值 - 单调队列
1、题目描述给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组[2, 3, 4, 2, 6, 2, 5, 1]及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为[4, 4, 6, 6, 6, 5]。注意:数据保证k大于0,且k小于等于数组长度。样例输入:[2, 3, 4, 2, 6, 2, 5, 1] , k=3输出: [4, 4, 6, 6, 6, 5]2、分析单调队列,队列中的元素单减队列中保存的是元素的下标。3.原创 2020-07-22 09:02:18 · 266 阅读 · 0 评论 -
LeetCode 814. 二叉树剪枝
1、题目链接https://leetcode-cn.com/problems/binary-tree-pruning/给定二叉树根结点root,此外树的每个结点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身,以及所有 X 的后代。)2、分析二叉树的大部分题目都可以使用递归来思考。当前访问节点的左、右子树都为null(也就是为叶子节点),且当前节点的值为0,则需要删除。也就相当于删除值为0的叶子结点。3、代码..原创 2020-07-21 09:14:41 · 157 阅读 · 0 评论 -
LeetCode 买卖股票的最佳时机 - 超详细讲解系列题
1、分析使用通用方法,也即动态规划DP(1)LeetCode121. 买卖股票的最佳时机class Solution { public int maxProfit(int[] prices) { if(prices == null || prices.length == 0) return 0; int n = prices.length; int[][] dp = new int[n][2]; for(int i .原创 2020-07-20 18:41:32 · 697 阅读 · 0 评论 -
LeetCode 206. 反转链表 - 迭代和递归(超详细解题思路)
1、题目链接https://leetcode-cn.com/problems/reverse-linked-list/2、分析(1)迭代使用双指针直接上代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solutio原创 2020-07-20 09:09:30 · 189 阅读 · 0 评论 -
LeetCode 19. 删除链表的倒数第N个节点
1、题目链接https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/2、分析设置了一个虚拟头结点,可以有效的避免删除头结点等一些边界情况。cur=dummy;//赋值为虚拟头结点,关键3、上代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode ne...原创 2020-07-19 21:23:05 · 104 阅读 · 0 评论 -
LeetCode第120题 三角形最小路径和 Triangle -- 超详细解析
1、题目描述https://leetcode-cn.com/problems/triangle/2、解题思路3、代码class Solution { public int minimumTotal(List<List<Integer>> t) { //当前行可以是从 上一行 左边 或者 右边 移动过来 //f[i][j]代表所有从第一层起点走到最下层某个数的所有路径的集合 //对于 j>0 :.原创 2020-06-16 07:56:41 · 276 阅读 · 0 评论 -
LeetCode第547题 朋友圈 Friend Circles -- 超详细解析
1、题目描述https://leetcode-cn.com/problems/friend-circles/2、解析3、代码class Solution { final int N = 210; int[] p = new int[N]; int find(int x){ if(p[x] != x){ p[x] = find(p[x]); } return p[...原创 2020-06-15 09:07:48 · 1927 阅读 · 0 评论 -
食物链 -- 《算法竞赛进阶指南》 , NOI2001 超详细解析
1、题目描述动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是”1 X Y”,表示X和Y是同类。第二种说法是”2 X Y”,表示X吃Y。此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则原创 2020-06-14 22:52:21 · 832 阅读 · 0 评论 -
LeetCode706 设计哈希映射 -- 超详细
1、题目:https://leetcode-cn.com/problems/design-hashmap/2、功能:实现哈希表,也就是HashMap的底层实现(1)我们查看HashMap的源码:原创 2020-06-11 20:08:40 · 146 阅读 · 0 评论 -
LeetCode 297 二叉树的序列化与反序列化(超详细题解)
1、序列化采用先根遍历的方法,必须把空节点加上2、反序列化序列化后的结果:"1,2,#,#,3,4,#,#,5,#,#"那么,反序列化时,第一个字符一定是根节点,第二个字符一定是左子树的根节点了。注意:一般情况下,如果只有前序遍历的话,并不能唯一确定一棵二叉树;前序遍历 + 中序遍历,可以唯一确定一棵二叉树了。为什么这道题,只用前序遍历就能唯一确定一棵二叉树呢?因为加上了空节点null3、代码package com.leetcode;impor.原创 2020-06-10 19:45:21 · 360 阅读 · 0 评论 -
LeetCode46之打卡 全排列 Permutations
1、代码class Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> permute(int[] nums) { if(nums==null || nums.length==0) return res; List<Integer> path = new ArrayList<>();原创 2020-05-25 22:09:18 · 116 阅读 · 0 评论 -
LeetCode79 打卡之单词搜索 Word Search
1、解题思路这是一个使用回溯算法DFS解决的问题,涉及状态重置。一个点在上、右、下、左四个方向运动,一般可以采用如下的方式:/** * 使用dfs * * x-1,y x,y-1 x,y x,y+1 x+1,y * @return */private int[] dx = new int[]{-1, 0, 1, 0}; //上、右、下、左四个方向 private int[] dy = new int[]{0, 1,原创 2020-05-22 22:32:20 · 143 阅读 · 0 评论