- 博客(10)
- 收藏
- 关注
原创 算法打卡:第11周
问题一 多次搜索:https://leetcode-cn.com/problems/multi-search-lcci/ 思路:使用前缀树保存所有待查找的字符串,然后依次遍历big字符串,将所有子串的前缀查找出来,最后反向找到所有的待查找字符串位置。 public int[][] multiSearch(String big, String[] smalls) { Trie trie = new Trie(); for (String s : smalls) { trie.i
2021-05-30 16:36:04
91
原创 算法打卡:第9周
问题一 剑指Offer 34.二叉树中和为某一值的路径:https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/ 思路:递归遍历并保存所有路径,然后计算符合要求的路径。 public List<List<Integer>> pathSum(TreeNode root, int target) { if (root == null) { return
2021-05-15 10:49:13
107
原创 算法打卡:第8周
问题一 LRU 缓存:https://leetcode-cn.com/problems/lru-cache-lcci/ 思路:首先需要理解LRU的含义:LRU-最近最久未使用; LFU-最近最少使用(最不常用)。很显然,因为需要存储K-V键值,所以需要使用到HashMap结构。其次,需要维护一个结构,来存储最近使用的到的数据的key,以便在容量满了的时候去除最近最久未使用的那个key。 class LRUCache { private Map<Integer, Integer> cach
2021-05-02 13:36:30
102
原创 算法打卡:第7周
问题一 寻找峰值: https://leetcode-cn.com/problems/find-peak-element/ 思路:依次遍历,比较当前位置的值是否大于前后的值(头尾元素需要特殊处理)。 public int findPeakElement(int[] nums) { if (nums.length == 1) { return 0; } boolean flag = false; for (int i = 0; i < nums.lengt
2021-04-24 23:41:25
163
原创 算法打卡:第6周
问题一 接雨水:https://leetcode-cn.com/problems/trapping-rain-water/ 思路:第一次想到的是建立一个n * m的矩阵,有柱子的位置用1表示,没有柱子的位置也就是可能是雨水的用0表示,只要每一行的任何的0两边都被1包夹着,则表示此处接到了雨水,但是oj判断空间和时间都太高了,直接溢出了。换个思路,每次计算每个位置的雨水高度,每个位置的雨水高度取决于左右两边的最高的柱子中,比较低的一侧的柱子。 public int trap(int[] height) {
2021-04-18 10:56:07
77
原创 算法打卡:第5周
问题一 汉诺塔问题: https://leetcode-cn.com/problems/hanota-lcci/ 思路:汉诺塔问题,使用递归解决,主要三个步骤: (1)、将A上n - 1个盘子移动到B上,借助C (2)、将A第n个盘子移动到C上 (3)、将B上的n - 1个盘子移动到C上,借助A public void hanota(List<Integer> A, List<Integer> B, List<Integer> C) { move(A.size()
2021-04-10 15:59:47
70
原创 算法打卡:第4周
问题一 队列的最大值: https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/ 思路:其实本题需要实现的是一个优先队列,可以用作第二题的解答。 class MaxQueue { private List<Integer> list; public MaxQueue() { list = new LinkedList<>(); } public int max_valu
2021-04-10 15:39:46
65
原创 算法打卡:第3周
问题一 计算器: https://leetcode-cn.com/problems/calculator-lcci/ 思路:将数字与操作符分开,然后第一遍计算乘除法,第二遍计算加减法。 例如:3 + 4 * 4 / 2 操作: + * / 数字:3 4 4 2 操作符的个数比数字少一个,将操作符一一从栈中弹出,就可以依次计算完成。 public int calculate(String s) { char[] arr =
2021-04-04 16:43:24
63
原创 算法打卡:第2周
问题一 两数相加:https://leetcode-cn.com/problems/add-two-numbers/ 思路:首先想到的是,按v1 * 1 + v2 * 10 + v3 * 100 + …去计算每一个数的值,但是其值可能超过long的最大值,所以不能使用此方式,这也是为什么题目最后要求使用listnode输出的原因。那就按照最基础的思路去做,按照小学两数相加去做,从低位计算,超过十就进一位。 public ListNode addTwoNumbers(ListNode l1, ListNode
2021-04-03 23:23:15
102
原创 算法打卡:第1周
问题一面试题 01.03. URL化:https://leetcode-cn.com/problems/string-to-url-lcci/ 面试题 01.03. URL化:https://leetcode-cn.com/problems/string-to-url-lcci/ 思路:先排除空串或实际长度为0的情况,将字符串转化为字符数组,然后遍历数组,遇到空格时添加%20。 if (S == null || S.length() == 0 || length == 0) { re
2021-04-03 22:03:09
68
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人