Leetcode
GeeksforGeeks
没有什么比技术更好的认证
展开
-
动态规划路径问题
1.矩阵的最小路径和程序员代码面试指南(第二版)给定一个矩阵从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。构造一个动态矩阵数组,当m,n大于0时,每次arr[i][j]选取上面与左面最小值加当前数组值。 public static int minPath(int[][] arr) { int m = arr....原创 2019-11-03 21:09:49 · 437 阅读 · 0 评论 -
斐波那契数问题
1.斐波那契数1,1,2,3,5,8,13…从第三项开始之后的每一项都是前两项的和。递归有许多重复计算。 public int fib(int N) { if (N < 1) return 0; if (N == 1) return 1; return fib(N - 1) + fib(N - 2); }非递归,效率高,面试官的挚爱。 public in...原创 2019-11-03 21:09:20 · 532 阅读 · 1 评论 -
动态规划之“最长系列”
1.最长递增子序列程序员代码面试指南(第二版)找到数组中的最长递增子序列。package dynamicprogram;public class Main最长递增子序列 { public static void main(String[] args) { int[] arr = {2,1,5,3,6,4,8,9,7}; print(arr); int[] getdp = g...原创 2019-10-27 17:34:51 · 248 阅读 · 0 评论 -
动态规划零钱兑换
1.零钱兑换Leetcode 322;medium;数组中给出面额,amount为要兑换到的钱,求兑换出的最少钱币的张数。我们采用自下而上的方式进行思考。在计算 F(i) 之前,我们先计算出 F(0)-F(i-1) 的答案。例如:F(11)= min{F(11-1),F(11-2),F(11-5)} + 1package dynamicprogram;import java....原创 2019-10-27 15:51:20 · 2018 阅读 · 0 评论 -
栈的括号匹配问题
1.有效的括号Leetcode 20;easy;栈的经典问题!package stack;import java.util.Stack;public class Main0020有效的括号 { public static void main(String[] args) { System.out.println(new Solution20().isValid("([]()){...原创 2019-10-27 12:13:04 · 103 阅读 · 0 评论 -
用两个栈实现队列
1.用两个栈实现队列Leetcode 232;easy;注重代码的规范性、完整性、鲁棒性。采用双栈实现队列,先将数字放入stackPush,然后pop到stackPop栈中,然后pop就是出队列的实现形式;注意两个思想:(1):stackPush中的数据必须一次性全部压入stackPop中;(2):如果stackPop栈不为空,绝不能将stackPush栈中的元素压入stackPop栈,...原创 2019-10-22 23:39:22 · 108 阅读 · 0 评论 -
最小栈问题
1.最小栈Leetcode 155;easy;1.两种方法大同小异。2.定义一个数据栈也就是正常存放数字的栈,再定义一个存放最小值的栈;3.在pop数字的时候添加判断栈空的判定条件,面试会加分;4.push:数据栈正常push数字,最小值栈的添加条件:栈空 或者 当 x <= 最小栈的栈顶元素添加;5.pop:数据栈先判断栈空,栈非空pop数据;将pop数据保存下来,如果最小栈栈...原创 2019-10-19 10:37:14 · 82 阅读 · 0 评论 -
二叉树之深度和结点问题
1.二叉树的最小深度Leetcode 111;easy;package tree;public class Main0111二叉树的最小深度 { public static void main(String[] args) { TreeNode root = new TreeNode(1); TreeNode node1 = new TreeNode(2); root.lef...原创 2019-10-19 09:26:51 · 519 阅读 · 0 评论 -
二叉树之双树验证系列
1.相同的树Leetcode 100;easy;package tree;import java.util.LinkedList;import java.util.Queue;public class Main0100相同的树 { public static void main(String[] args) { TreeNode root1 = new TreeNode(1);...原创 2019-10-19 09:26:20 · 95 阅读 · 0 评论 -
二叉树之验证各种树系列
1.平衡二叉树Leetcode 110;easy;一定要了解什么是平衡二叉树、二叉搜索树、完全二叉树!package tree;public class Main0110平衡二叉树 { public static void main(String[] args) { TreeNode root = new TreeNode(1); TreeNode node1 = new Tr...原创 2019-10-15 08:08:24 · 150 阅读 · 0 评论 -
二叉树之路径问题
1.二叉树的所有路径Leetcode 257;medium;二叉树的路径问题很常见,递归的思路不难理解,但也需要手写过程熟悉思路!package tree;import java.util.ArrayList;import java.util.List;public class Main0257二叉树的所有路径 { public static void main(String[]...原创 2019-10-14 19:27:30 · 240 阅读 · 0 评论 -
二叉树之公共祖先问题
1.二叉树的公共祖先Leetcode 236;easy;面试官的最爱!一定要和面试官确定是二叉树还是二叉搜索树!package tree;import java.util.ArrayList;import java.util.List;public class Main0236二叉树的最近公共祖先 { public static void main(String[] args)...原创 2019-10-13 09:16:43 · 133 阅读 · 0 评论 -
二叉树之遍历系列
1.二叉树的中序遍历Leetcode 94;medium;遍历系列常使用,最好能掌握迭代和递归方法!package tree;import java.util.ArrayList;import java.util.List;import java.util.Stack;public class Main0094二叉树的中序遍历 { public static void main...原创 2019-10-13 09:15:51 · 93 阅读 · 0 评论 -
链表之重排链表
1.重排链表Leetcode 143;medium;例:给定链表 1->2->3->4, 重新排列为 1->4->2->3.此题的Key在于要先反转后半段链表,然后进行两条链表的粘结,两条链表的上下连接是Key!package linkedlist;public class Main0143重排链表 { public static void ma...原创 2019-10-12 07:58:14 · 372 阅读 · 0 评论 -
链表之回文链表
1.判断回文链表Leetcode 234;easy;此题用栈很简单。为了最优解,采用reverse前半段或者后半段链表,依次比较即可!package linkedlist;import java.util.Stack;public class Main0234回文链表 { public static void main(String[] args) { ListNode he...原创 2019-10-12 07:57:34 · 100 阅读 · 0 评论 -
链表之删除系列
1.删除链表的倒数第N个节点Leetcode 19;medium;删除无非就要找到要删除节点的前一个节点,但要注意边界结点的处理!方法 1: 定义一个新链表指向 head,在dummy进行 Operation,定义 fast 和 slow 两个指针同时指向新链表的头结点,先让 fast 走 n 步,如果fast = null,那么n > 链表长度,否则 fast 和 slow 一起往下...原创 2019-10-10 19:30:41 · 169 阅读 · 0 评论 -
链表之合并系列
1、合并两个有序链表Leetcode 21;easy;递归和迭代两个版本需要掌握。package linkedlist;public class Main0021合并两个有序链表 { public static void main(String[] args) { ListNode l1 = new ListNode(1); ListNode node1 = new ListN...原创 2019-10-10 19:31:01 · 92 阅读 · 0 评论 -
链表之环形链表
1.判断是否有环Leetcode 141;easy;定义两个指针slow和fast,只要slow指针追上每次走两步的fast指针的话就有环,否则就没!package linkedlist;public class Main0141环形链表 { public static void main(String[] args) { }}class Solution141 { p...原创 2019-10-10 19:42:52 · 113 阅读 · 0 评论 -
链表之相交问题
1.返回相交链表第一个相交结点Leetcode 160;medium;此题的解:第一个阶段:首先获得A和B链表的长度lenA和lenB,定义headA和headB指针分别指向A和B链表的头部;第二个阶段:如果lenA > lenB,先让headA走lenA - lenB步,然后headA和headB再一起向后移动,遇到相同结点返回就可以啦!Key:别忘记获得长度后判断一下两条链表的最...原创 2019-10-11 08:12:58 · 130 阅读 · 0 评论 -
链表之反转系列
1. 反转链表Leetcode206;easy;反转全部的单链表,递归和非递归版本!package linkedlist;public class Main0206反转链表 { public static void main(String[] args) { ListNode head = new ListNode(1); ListNode node = new ListNod...原创 2019-10-10 12:36:49 · 96 阅读 · 0 评论