随笔分类 - 数据结构与算法
摘要:JAVA: public final boolean canCross(int[] stones) { int len = stones.length; return jump(stones, 0, 0, new HashMap<Long, Boolean>()); } private final
阅读全文
摘要:JAVA DP 反向: public final int maximalSquare(char[][] matrix) { int xLen = matrix.length, yLen = matrix[0].length, re = 0; int[][] cache = new int[xLen]
阅读全文
摘要:JAVA DP: public final boolean wordBreak(String s, List<String> wordDict) { Set<String> set = new HashSet<String>(); for (String word : wordDict) set.a
阅读全文
摘要:JAVA DP: public final int shoppingOffers(List<Integer> price, List<List<Integer>> special, List<Integer> needs) { Map<String, Integer> cache = new Has
阅读全文
摘要:JAVA: public final ListNode partition(ListNode head, int x) { ListNode leftHead = new ListNode(), rightHead = new ListNode(), left = leftHead, right =
阅读全文
摘要:. 和 / 的可能组合过多时,分开处理。先按 / 分割字符串,再处理 . 。 JAVA: public final String simplifyPath(String path) { int len = path.length(); StringBuilder sb = new StringBui
阅读全文
摘要:主函数的剪枝,判断单词是否由数组中的单词组成的函数的记忆化。 public final String longestWord(String[] words) { Arrays.sort(words, (o1, o2) -> { if (o1.length() == o2.length()) retu
阅读全文
摘要:JAVA: public final List<String> findLadders(String beginWord, String endWord, List<String> wordList) { List<String> re = new LinkedList<String>(); Set
阅读全文
摘要:JAVA 暴力(BFS): public final int[] findBall(int[][] grid) { int len = grid[0].length; int[] balls = new int[len]; for (int i = 0; i < balls.length; i++)
阅读全文
摘要:贪心 JAVA: public final int minFlips(String target) { int len = target.length(), num = 0; for (int i = 0; i < len; i++) { char curr = num % 2 == 0 ? '0'
阅读全文
摘要:JAVA: public final int numWaterBottles(int numBottles, int numExchange) { int re = numBottles, empty = numBottles; while (empty >= numExchange) { int
阅读全文
摘要:问题的遍历可以通过按顺序尝试每一个锁的所有可能,但是因为需要记录转动次数。尝试可能性的时候并不能很好的记录转动次数。 以转动次数为遍历的线,将每转动一次的所有可能进行记录,并以此为基础计算下一次转动的所有可能性。 当惯用的遍历方式不适合解题时,找到矛盾的点,从矛盾点出发考虑新的遍历方式。 当视角放在
阅读全文
摘要:回溯解法,JAVA: public final int numTilePossibilities(String tiles) { Set<String> set = new HashSet<String>(); search(tiles.toCharArray(), "", tiles.length
阅读全文
摘要:暴力法: public final int maxScoreSightseeingPair(int[] values) { int len = values.length, re = 0; for (int i = 0; i < len; i++) { //剪枝用 int maxJ = 0; for
阅读全文
摘要:JAVA: public final int numRescueBoats(int[] people, int limit) { if (people == null || people.length == 0) return 0; Arrays.sort(people); int len = pe
阅读全文
摘要:JAVA: public final boolean isSubStructure(TreeNode A, TreeNode B) { if (A == null || B == null) return false; if (isSame(A, B)) return true; return is
阅读全文
摘要:JAVA: public final int findLengthOfLCIS(int[] nums) { if (nums.length < 2) return nums.length; int len = nums.length, left = 0, right = 1, re = 0; whi
阅读全文
摘要:顺序合并时间复杂度 O(N) ,远快于任何排序算法。 JAVA: public final List<Integer> getAllElements(TreeNode root1, TreeNode root2) { List<Integer> list1 = new LinkedList<Inte
阅读全文
摘要:JAVA 红黑树: class ExamRoom { TreeSet<Integer> seats; int last; public ExamRoom(int N) { this.last = N - 1; this.seats = new TreeSet<Integer>(); } public
阅读全文
摘要:前序遍历与后续遍历的组合可以构成一个完整的子树区间。 子树的根节点会在前序遍历中该子树的首位出现,在后续遍历中则会在该子树的末尾出现。 那么,前序-后序的重合节点所构成的区间,便是以该重合节点为根节点的整棵子树。 进而考虑该思路是否可以一直递归至边界情况。 JAVA: public final Tr
阅读全文