一个有思想的搬运工

我浑浑噩噩,却又不甘落寞

【探索-中级算法】生成括号

得到全排列的组合,同时对于不符合要求的组合要剔除。 public List<String> generateParenthesis(int n) { List<String&...

2018-11-13 14:09:53

阅读数:6

评论数:0

【探索-中级算法】电话号码的字母组合

回溯法 引用自:https://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741376.html 概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯...

2018-11-12 14:30:32

阅读数:2

评论数:0

【探索-中级算法】岛屿的个数

最开始想到的解决方法,就是借助一个辅助数组 boolean[][] map,其中 map[i][j]==true 表示该土地已经被访问过了,且再借助深度遍历,当遇到一块土地时,同时把与其相连的土地都给遍历掉。 public int numIslands(char[][] grid) { ...

2018-11-10 16:00:16

阅读数:23

评论数:0

【探索-中级算法】二叉搜索树中第K小的元素

根据二叉搜索树的性质,对其进行中序遍历,会得到一个递增排序的序列,这是一个特性,因此解题的时候可以利用之。 解法1 public int kthSmallest(TreeNode root, int k) { List<Integer&amp...

2018-11-09 14:59:33

阅读数:24

评论数:0

【探索-中级算法】每个节点的右向指针

要注意题目给出的条件,其中,使用递归是可以,而使用递归,也是最直观的,且可以假设是一个完美二叉树,因此在处理的时候,可以减少判断逻辑。 先上代码: public void connect(TreeLinkNode root) { if (root!=null) { roo...

2018-11-08 15:56:15

阅读数:43

评论数:0

【探索-中级算法】从前序与中序遍历序列构造二叉树

题目中有说 “可以假设树中没有重复的元素”,隐含的意思就是在前序和中序遍历的数组中如果存在某一个元素相等,即可判定为同一节点所对应的。 然后就是寻找规律,前序遍为根左右,因此在前序遍历数组 [3, 9, 20, 15 , 7] 中,第一个元素「3」即为最原始的根节点,且对应中序遍历数组 [9, ...

2018-11-07 14:11:32

阅读数:4

评论数:0

【探索-中级算法】二叉树的锯齿形层次遍历

有两种解决途径,但是规律类似。 1.迭代实现 public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List&lt...

2018-11-06 15:32:57

阅读数:6

评论数:0

【探索-中级算法】中序遍历二叉树

对于二叉树的前、中、后三种遍历顺序,每种遍历算法可以分为递归与迭代来实现。 前序遍历:根左右 中序遍历:左根右 后序遍历:左右根 具体实现参考:二叉树遍历(先序、中序、后序) ...

2018-11-05 12:56:01

阅读数:16

评论数:0

【探索-中级算法】相交链表

注意题目要求的时间与空间复杂度。 只要保持交点之前移动的距离相等即可。即在遍历 A、B 的时候要同时从 a1 和 b2 开始,这样才能保证同时遍历到相交的 c1。 public ListNode getIntersectionNode(ListNode headA, ListNode headB...

2018-11-04 12:38:06

阅读数:22

评论数:0

【探索-中级算法】奇偶链表

首先,一定要理解题目。 然后就是规定限制条件,要使用原地算法,空间复杂度要为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 1、基于原地算法,但是时间复杂度为 O(n^2) public ListNode oddEvenList(ListNode head) { ...

2018-11-02 14:12:22

阅读数:9

评论数:0

【探索-中级算法】两数相加

public ListNode addTwoNumbers(ListNode l1, ListNode l2) { if (l1==null) return l2; else if (l2==null) return l1; ListNode ...

2018-11-01 16:30:45

阅读数:18

评论数:0

【探索-中级算法】递增的三元子序列

最先想到的思路,就是用一个 Map<Integer, List<Integer>>,其中 key 对应下标 index,value 为当 in...

2018-10-31 19:50:34

阅读数:15

评论数:0

【探索-中级算法】最长回文子串

这一题可以参考:647. 回文子串 本质上是一样的,要判断出所有的回文字串,然后找到其中最长的那一个。 中心扩展法 中心扩展就是把给定的字符串的每一个字母当做中心,向两边扩展,这样来找最长的子回文串。算法复杂度为O(N^2) public String longestPalindrome(St...

2018-10-31 16:46:08

阅读数:9

评论数:0

【探索-中级算法】无重复字符的最长子串

1. 参考自:https://juejin.im/post/5aa159f86fb9a028bb189420 思路: 初始化一个 255 的 boolean 数组(字符对应的数字作为数组下标)作为所有可能出现的字符对应的存在可能性,不存在重复的均为 false,存在重复的,则对应的下标置为 t...

2018-10-29 21:53:10

阅读数:13

评论数:0

【探索-中级算法】字谜分组

解题的关键思想就是将字符串建立起无关于字母顺序,只关于字母个数的唯一映射关系,这样 ,对于同一组符合要求的字符串,则它们的映射都是一样的,以此作为分组的依据。 具体的解题方法,暂时想到了两种。 1、将字符串映射为字母+数字的组合,如 a1b2c3,这样是符合上述条件的。 public stat...

2018-10-25 19:30:11

阅读数:20

评论数:0

【探索-中级算法】矩阵置零

参考链接:https://www.jianshu.com/p/d0017b1e38c4 O(mn) 的额外空间 public void setZeroes1(int[][] matrix) { if (matrix == null || matrix[0] == null || mat...

2018-10-24 20:33:28

阅读数:23

评论数:0

【探索-中级算法】三数之和

参考链接:LeetCode总结-K-Sum问题 本文介绍的解题思想的核心就是排序,排序有两个目的,第一个是次要的,即方便排除重复的组合。第二个就是使得可以按照递增或者递减方便的移动指针 l、r。 在排序之后,就可以对数组进行遍历,目标就是找到符合 nums[l] + nums[r] == -t...

2018-10-23 16:15:30

阅读数:43

评论数:2

95. 不同的二叉搜索树 II

参考链接:https://blog.csdn.net/happyaaaaaaaaaaa/article/details/51635367 在参考原本的基础上,使用一个辅助数组,保存递归中的值,避免重复计算。 //递归实现 public List<TreeNod...

2018-05-03 11:52:14

阅读数:608

评论数:0

300. 最长上升子序列

1、常规动归思想 首先使用的是常规的动归思想,时间复杂度为 O(n^2),不多解释,只是要注意,dp[i] 每次都是在 dp[0] - dp[i-1] 中寻找最大的值 + 1。 public int lengthOfLIS(int[] nums) { if (nums == n...

2018-04-23 10:52:45

阅读数:192

评论数:0

718. Maximum Length of Repeated Subarray

题目的大概意思,就是求两个数组中相同的最大连续子序列的长度。 题目自然是用动归来解决,但是一开始我想错来思路,代码如下: public int findLength2(int[] A, int[] B) { int[][] dp = new int[A.length][B...

2018-04-21 19:51:06

阅读数:28

评论数:0

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