12 2020 档案
摘要:—— 转载自牛客网 是瑶瑶公主吖 Java 基础 40 语言特性 12 Q1:Java 语言的优点? ① 平台无关性,摆脱硬件束缚,"一次编写,到处运行"。 ② 相对安全的内存管理和访问机制,避免大部分内存泄漏和指针越界。 ③ 热点代码检测和运行时编译及优化,使程序随运行时间增长获得更高性能。 ④
阅读全文
摘要:题目 814. 二叉树剪枝 思路 就是先从最后一层叶子节点开始判断,将左右子树的结果反馈给父节点,让父节点做出判断 根据这个思路我们可以利用二叉树的后序遍历来实现: 后序遍历就是先左孩子,然后右孩子,最后父节点 父节点的判断条件就是:父节点本身的值是否为1、左孩子是否为存在1、右孩子是否存在1.这三
阅读全文
摘要:题目 面试题 17.17. 多次搜索 思路 将所有的短单词构建成一个前缀树,同时也要讲短单词的位置记录下来,因为要的结果也是有序的 然后查找的时候,用长字符串来匹配:将长字符串的每一个字符作为开头,截取他的子串,将其子串在前缀树中进行查找,匹配的话就将结果加入到结果集中即可 代码 class Sol
阅读全文
摘要:题目 677. 键值映射 思路 插入就是前缀树的插入 val值意思是该单词对应的值,而不是该单词每一个字符对应的值(刚开始我以为每个字符的val都要对应该单词的val,其实想错了) 获取前缀子串的key总和时候,用 DFS 前序遍历递归来求解,先将 node 指向当前的字串最后一个位置,然后从该位置
阅读全文
摘要:题目 208. 实现 Trie (前缀树) 思路 在我们生活中很多地方都用到了前缀树:自动补全,模糊匹配,九宫格打字预测等等。。。 虽然说用哈希表也可以实现:是否出现过该单词,该单词出现过几次,但是,在某些情况下,效率并不高:比如我们要查他的前缀是否出现过,那么用哈希表就不好实现了,用前缀树更适合更
阅读全文
摘要:题目 560. 和为K的子数组 思路1(前缀和) 构建前缀和数组,可以快速计算任意区间的和 注意:计算区间时候,下标有变化,计算nums[i..j]之间的和,那么就是sum = prefixSum[j+1] - prefixSum[i],因为prefixSum的0索引位置是0,总的长度比nums大1
阅读全文
摘要:题目 剑指 Offer 09. 用两个栈实现队列 思路 刚开始想的是用stack1作为数据存储的地方,stack2用来作为辅助栈,如果添加元素直接push入stack1,如果删除元素,把stack1中的n-1个给pop到stack2中,然后剩下一个直接pop掉,然后再把stack2中的元素给在倒回去
阅读全文
摘要:题目 20. 有效的括号 思路(辅助栈) 用栈后进先出(LIFO)将符号入栈 再利用HashMap存储符号对 由于都是这些符号,所以对每一个符号进行判断,如果左括号直接入栈,右括号再进行判断是否符合 代码 class Solution { public boolean isValid(String
阅读全文
摘要:题目 70. 爬楼梯 思路1(数学公式) 利用斐波那契数列的公式即可 代码 class Solution { public int climbStairs(int n) { double sqrt_5 = Math.sqrt(5); double fib_n = Math.pow((1+sqrt_5
阅读全文
摘要:题目 78. 子集 思路1(回溯+DFS) 通过该数组[1, 2, 3]构建一棵树 刚开始什么都没有,接下来又两种选择,要么继续不添加,要么添加一个1 如果是没添加的话,那么接下来又有两种选择,还是不添加,或者添加一个1 如果已经添加了一个1,接下来还是有两种选择,不添加,或者添加2 ......以
阅读全文
摘要:题目 92. 反转链表 II 思路1(迭代) 将反转链表分成3个部分:前一段未反转的部分、待反转链表部分、后一段未反转部分 将3个片段分离后,然后再连接起来 细节注意:如果是从第一个开始反转链表,即前一段未反转的部分不存在,那么返回的结果就直接是反转链表片段的新节点,否则就是head 代码 clas
阅读全文
摘要:题目 102. 二叉树的层序遍历 思路1(迭代) BFS广度优先搜索 用队列先进先出特性遍历 代码 class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = ne
阅读全文
摘要:题目 145. 二叉树的后序遍历 思路1(递归) 中序先遍历左孩子,然后右孩子,最后父节点 递归遍历 代码 class Solution { List<Integer> res = new ArrayList<>(); public List<Integer> postorderTraversal(
阅读全文
摘要:题目 94. 二叉树的中序遍历 思路1(递归) 中序先遍历左孩子,然后父节点,然后右孩子 递归遍历 代码 class Solution { List<Integer> res = new ArrayList<>(); public List<Integer> inorderTraversal(Tre
阅读全文
摘要:题目 144. 二叉树的前序遍历 思路1(递归) 前序先遍历根节点,然后左孩子,然后右孩子 使用递归解题 代码 class Solution { List<Integer> res = new LinkedList<>(); public List<Integer> preorderTraversa
阅读全文
摘要:题目 37. 解数独 思路(回溯+递归) 用三个数组分别记录行、列、块是否已填入数字 在用一个ArrayList数组来存储数组行、列下标 从ArrayList的第一个元素开始尝试,如果符合条件,进入下一个数字的填写,如果不符合条件,那么就回溯,直到如果填道ArrayList的最后一个元素,那么就说明
阅读全文