一个有思想的搬运工

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

【探索-字节跳动】最长连续递增序列

题目只要找最长的连续且递增的序列,因此在实现上比较简单,只要一个辅助变量,记录前一个元素 num[i-1] 以其结尾时的连续递增序列的长度即可,然后用当前元素 nums[i] 与止比较即可。 public int findLengthOfLCIS(int[] nums) { if (nu...

2018-12-16 17:47:38

阅读数:35

评论数:1

【探索-字节跳动】复原IP地址

可以使用深搜,看每一次的组合是不是符合条件。 public List<String> restoreIpAddresses(String s) { int[] segsStart = new int[4]; dfs(s, segsSta...

2018-12-10 20:51:18

阅读数:29

评论数:0

【探索-字节跳动】简化路径

以输入的 / 作为分割,来进行判断,因此有如下几种情况: 1、多个连续 / 的情况,则忽略后面的 2、一个或者多个连续 . 的情况 (1) 只有一个点的话,则表示还是在当前目录 (2) 两个点的话,则要返回到上一级目录 (3) 三个或者以上的点,则不进处理,正常遍历 3、以及正常的路径名,...

2018-12-10 19:36:17

阅读数:41

评论数:0

【探索-字节跳动】翻转字符串里的单词

实现思想,就是先整个的把字符串倒转过来,如 the sky is blue 直接倒转成 eulb si yks eht,然后,再单独把每个单词还原即可。另外还需要注意说明中的条件。 public String reverseWords(String s) { if (s==null||s...

2018-11-27 16:20:31

阅读数:34

评论数:0

【探索-字节跳动】字符串相乘

题目中已经限制了算法的实现途径,即不能用 Java 中现成的 API 去实现,也不能直接转换为整形去相乘。 而且这里会涉及到大数,所以我的想法是利用我们手写乘法时的规则饿,将 num1 和 num2 中位数较长的去直接乘以 位数较短的每一位,然后依次把结果加起来即可。 // 执行用时:32 ms...

2018-11-26 15:05:42

阅读数:19

评论数:0

【探索-字节跳动】字符串的排列

这题的核心问题就是 “如何对一个字符串建立一个无关于字符串内字母顺序的唯一映射”。 类似于这种问题的,之前有接触过,因为题目给出了字符只包含小写字母,所以我就借助一个辅助数组,对于字符串 s1,遍历其每个字符,并把出现的相同字母的数量映射到该数组中,这样就解决了上述问题。(貌似术语就是使用 字典...

2018-11-24 11:09:30

阅读数:49

评论数:0

【探索-字节跳动】最长公共前缀

解法一 先找出最短的那个字符串,然后遍历该字符串的每一个字符,并与剩余字符串的对应位置的字符比较,如果有出现不一致的时候,就表明公共前缀截止了。 public String longestCommonPrefix(String[] strs) { if (strs==null||strs...

2018-11-22 22:08:00

阅读数:21

评论数:0

【探索-中级算法】颜色分类

初级解法一 首先,使用最简单的解法,可以拆分成两步。 第一步:扫描数组,先把 0 放在最前面,把 1 和 2 放在最后面(即使是混淆的也没关系)。 第二步:再在混淆的 1 和 2 中进行排序。 每一步的排序,都需要借助两个指针。 public void sortColors(int[] nums...

2018-11-20 20:24:42

阅读数:70

评论数:0

【探索-中级算法】单词搜索

解法一 递归 结合回溯与深搜,因同一单元格不能被重复使用,因此借助一个辅助数组用于记录单元格是否被访问过。 需要剪枝的策略: 1.当前元素与单词的对应位置的字母不一致 2.当前元素已经被遍历过 3.超出了 borad 的边界 public boolean exist(char[][] boar...

2018-11-17 16:53:46

阅读数:40

评论数:0

【探索-中级算法】子集

这里题目没有要求子集内的元素必须升序,也没有要求所有子集的排列顺序,且没有重复的元素。 参考自:http://www.cnblogs.com/grandyang/p/4309345.html 解法一 迭代 对于题目中给的例子[1,2,3]来说,最开始是空集,那么我们现在要处理1,就在空集上加1,...

2018-11-16 19:34:35

阅读数:33

评论数:0

【探索-中级算法】全排列

参考自:https://my.oschina.net/u/3744313/blog/1923933 解法一: 基于回溯的思想,借助一个辅助数组用于记录访问状态。 List<List<Integer>&...

2018-11-15 10:22:30

阅读数:12

评论数:0

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

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

2018-11-13 14:09:53

阅读数:17

评论数:0

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

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

2018-11-12 14:30:32

阅读数:20

评论数:0

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

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

2018-11-10 16:00:16

阅读数:36

评论数:0

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

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

2018-11-09 14:59:33

阅读数:40

评论数:0

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

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

2018-11-08 15:56:15

阅读数:69

评论数:0

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

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

2018-11-07 14:11:32

阅读数:21

评论数:0

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

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

2018-11-06 15:32:57

阅读数:38

评论数:0

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

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

2018-11-05 12:56:01

阅读数:74

评论数:0

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

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

2018-11-04 12:38:06

阅读数:31

评论数:0

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