04 2021 档案
摘要:快速排序 因为不要求返回数组的顺序,所以可以不做完整的排序 (做完整的快速排序) 完整快排递归版:(在一个函数里实现了快排,而不是像邓书里面那样写成两个) class Solution { //快速排序 //快速选择 //堆排序和快速排序的比较--面试热点 public int[] getLeast
阅读全文
摘要:按照回溯框架写出来了大概。 卡在细节的地方: 1.依靠当前元素位置来结束递归,下标的边界搞错了。是if(now==ss.length-1)而不是if(now==ss.length) 2.老问题。写经典递归和回溯常出现的错误: dfs(ss,i+1,path+num+'.',segment+1,i);
阅读全文
摘要:第一个没有用改进的next。第二个用了。 改进的next没有快多少,可能是因为样例不够充分。 改进的next只需要改动一两句。在原来应该更新next[]的时候“多看了一下后面”的情况,根据这个情况来更新。 这道题标为简单估计是因为暴力也能过?如果这能用KMP应该是困难吧。 class Solutio
阅读全文
摘要:直达叶节点,大量剪枝 class Solution { //观察得知,用dfs来做的,“节点”总数在10个左右 String ans=new String(); int[] data=new int[10]; boolean[] used; public String getPermutation(
阅读全文
摘要:剪枝技巧前面有写过。加强印象 class Solution { LinkedList<List<Integer>> ans=new LinkedList<>(); LinkedList<Integer> path=new LinkedList<>(); public List<List<Intege
阅读全文
摘要:每次被dfs(nums,i+1);//每次都这样,这里不是cur,是i这个卡住,看了上次写的才知道是这里写错了,不是第一次了无语。 class Solution { LinkedList<List<Integer>> ans=new LinkedList<>(); LinkedList<Intege
阅读全文
摘要:第一次还申请了一个used[]数组,借鉴了全排列去重的思路。 看了题解才知道,排序后只要判断i>begin就行了,妙啊。 放过不同层级的相同数字,不放过同一层级的相同数字,具体解释在评论区: 40题解 class Solution { LinkedList<List<Integer>> ans=ne
阅读全文
摘要:组合问题的变形 class Solution { LinkedList<List<Integer>> ans=new LinkedList<>(); LinkedList<Integer> path=new LinkedList<>(); public List<List<Integer>> com
阅读全文
摘要:组合问题。不需要used[]数组,限定下一次循环/搜索的起点即可. 本题不含重复数字且每个数字不可重复选择. 本题有另一种思路,即对每个数字有选与不选两种选择。 还有提前终止,时间优化很明显: 事实上,如果 n = 7, k = 4,从 55 开始搜索就已经没有意义了,这是因为:即使把 55 选上,
阅读全文
摘要:与不含重复数字的全排列相比,在于: 排序; 添加对上一数字的判断 class Solution { LinkedList<List<Integer>> ans=new LinkedList<>(); LinkedList<Integer> path=new LinkedList<>(); boole
阅读全文
摘要:这是无重复数字的全排列。 注意递归函数中的循环(循环起始位置)和used[]数组的使用 class Solution { //dfs和回溯 LinkedList<List<Integer>> res=new LinkedList<>(); LinkedList<Integer> path =new
阅读全文
摘要:好家伙,leetcode里用的都是BufferedReader import java.io.*; import java.util.*; public class ForInterview { public static void main(String[] args) throws Except
阅读全文

浙公网安备 33010602011771号