LeetCode 98— 验证二叉搜索树

public boolean isValidBST(TreeNode root) { if (root == null) return true; return valid(root, Long.MIN_VALUE, Long.MAX_VALUE); } private bool...

2019-05-21 18:05:43

阅读数 4

评论数 0

聊聊JVM的年轻代

1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的...

2019-04-28 11:04:44

阅读数 14

评论数 0

LeetCode 103—二叉树的锯齿形层次遍历

技巧:用两个栈实现不同层之间的遍历 public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer&gt...

2019-04-25 21:11:41

阅读数 8

评论数 0

LeetCode 102—二叉树的层次遍历

// 递归 public List<List<Integer>> levelOrder(TreeNode root) { if (root == null) { return null; } List<Lis...

2019-04-25 21:08:41

阅读数 6

评论数 0

十大经典排序算法(动图演示)

0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也...

2019-04-17 09:56:26

阅读数 36

评论数 0

LeetCode113—路径总和 II

递归: // 递归 public List<List<Integer>> pathSum(TreeNode root, int sum) { List<List<Integer>&g...

2019-04-15 10:14:03

阅读数 11

评论数 0

LeetCode 112—路径总和

递归: public boolean hasPathSum(TreeNode root, int sum) { if(root==null) return false; if(root.left==null&&root.right==null&am...

2019-04-13 20:53:35

阅读数 10

评论数 0

LeetCode 101—对称二叉树

判断二叉树是否是平衡树,比如有两个节点n1, n2,我们需要比较n1的左子节点的值和n2的右子节点的值是否相等,同时还要比较n1的右子节点的值和n2的左子结点的值是否相等,以此类推比较完所有的左右两个节点。我们可以用递归和迭代两种方法来实现,写法不同,但是算法核心都一样。 1.递归解法: p...

2019-04-03 14:36:28

阅读数 10

评论数 0

LeetCode 226—— 翻转二叉树

1.递归解法: public TreeNode invertTree(TreeNode root) { if(root==null) return null; TreeNode temp=root.left; root.left=inver...

2019-04-03 13:22:07

阅读数 16

评论数 0

LeetCode 105—从前序与中序遍历序列构造二叉树

首先需要确定,在前序遍历中,第一个节点为根节点,则根据根节点,可以在中序遍历中划分左右子树 在左右子树中,前序遍历的第一个节点为根节点,再继续划分左右子树 //根据前序遍历和中序遍历构建二叉树 public TreeNode buildTree(int[] preorder, int[]...

2019-04-03 10:50:23

阅读数 7

评论数 0

LeetCode 144—二叉树的前序遍历

递归遍历: 1.对递归基进行讨论 2.左子树进行前序遍历 3.对右子数进行前序遍历 //递归实现 public List<Integer> preorderTraversal(TreeNode root) { if (root == null) { ...

2019-03-27 12:54:13

阅读数 20

评论数 0

LeetCode 29—两数相除

利用位运算解题 public int divide(int dividend, int divisor) { if(divisor == 0 || (dividend == Integer.MIN_VALUE && divisor == ...

2019-03-12 10:04:27

阅读数 11

评论数 0

LeetCode 28—实现strStr()

如果子字符串为空,则返回0 如果子字符串长度大于母字符串长度,则返回-1。 遍历母字符串,我们并不需要遍历整个母字符串,而是遍历到剩下的长度和子字符串相等的位置即可,这样可以提高运算效率。然后对于每一个字符,我们都遍历一遍子字符串,一个一个字符的对应比较,如果对应位置有不等的,则跳出循环,如果...

2019-03-07 18:16:08

阅读数 27

评论数 0

LeetCode 27—移除元素

和26题的思路一样,也是设置两个指针,慢指针i用来保存数值,快指针j用来遍历数组 public int removeElement(int[] nums, int val) { int i=0; for(int j=0;j<nums.length;j++) ...

2019-03-07 15:48:10

阅读数 18

评论数 0

LeetCode 24—两两交换链表中的节点

两两合并节点,头结点的两个节点合并后,剩下的又可以转化为两两合并的子问题,所以递归求解即可。 public ListNode swapPairs(ListNode head) { if(head==null||head.next==null) { return hea...

2019-03-05 16:33:27

阅读数 12

评论数 0

LeetCode 22—括号生成

只有在我们知道序列仍然保持有效时才添加 '(' or ')'。我们可以通过跟踪到目前为止放置的左括号和右括号的数目来做到这一点, 如果我们还剩一个位置,我们可以开始放一个左括号。 如果它不超过左括号的数量,我们可以放一个右括号。 用open表示左括号的个数,close表示有括号的个数。 ...

2019-03-04 16:57:58

阅读数 19

评论数 0

LeetCode 19—删除链表的倒数第N个节点

典型的利用双指针法解题。首先让指针first指向头节点,然后让其向后移动n步,接着让指针sec指向头结点,并和first一起向后移动。当first的next指针为NULL时,sec即指向了要删除节点的前一个节点,接着让first指向的next指针指向要删除节点的下一个节点即可。注意如果要删除的节点...

2019-02-28 20:38:14

阅读数 18

评论数 0

LeetCode 18— 四数之和

四个数无非就是加一层for循环,值得注意的是,四个数中,第一个数、第三个数、第四个数的去重处理可以直接照搬上面的代码,加一下第二个数的去重处理即可。 public List<List<Integer>> f...

2019-02-27 21:56:22

阅读数 21

评论数 0

LeetCode 17—电话号码的字母组合

public List<String> letterCombinations(String digits) { String[][] numsList=new String[][] { {"a",...

2019-02-26 21:24:23

阅读数 33

评论数 0

LeetCode 16—最接近的三数之和

排序,和上一道题类似。 把三个数求和的解就转化为两个数相加等于某个数。 求解两个数相加等于某个数,用双指针法即可。不需要处理重复问题,还降低了难度。  public int threeSumClosest(int[] nums, int target) { Arrays.sort(n...

2019-02-25 20:09:15

阅读数 17

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭