随笔分类 -  数据结构与算法

上一页 1 ··· 3 4 5 6 7 8 9 下一页
摘要:回溯搜索: /** * @Author Niuxy * @Date 2020/7/12 6:41 下午 * @Description 回溯法, 暴力搜索 */ public int minSwap0(int[] A, int[] B) { if (A.length == 0) { return 0; 阅读全文
posted @ 2020-07-13 00:18 牛有肉 阅读(390) 评论(0) 推荐(0) 编辑
摘要:当一个问题用递推不好描述时,将目光从整体放到局部,用递归描述对于每个元素我们需要做什么。 问题:text 从 point1 、text2 从 point2 开始的最长公共子序列为 n ,具有递归结构,并存在大量重复子问题。 分治: public final int longestCommonSubs 阅读全文
posted @ 2020-07-11 03:33 牛有肉 阅读(212) 评论(0) 推荐(0) 编辑
摘要:暴力解法很容易: /** * @Author Niuxy * @Date 2020/7/9 9:49 下午 * @Description 暴力解法 */ public final int maxArea0(int[] height) { int max = 0; for (int i = 0; i 阅读全文
posted @ 2020-07-09 23:17 牛有肉 阅读(345) 评论(0) 推荐(0) 编辑
摘要:暴力解法: public final int maximumSum1(int[] arr) { int max = Integer.MIN_VALUE; for (int i = 0; i < arr.length; i++) { for (int j = i; j < arr.length; j+ 阅读全文
posted @ 2020-07-08 15:20 牛有肉 阅读(277) 评论(0) 推荐(0) 编辑
摘要:分治解法: public final int lengthOfLIS(int[] nums) { int[] cache = new int[nums.length]; int re = 0; for (int i = 0; i < nums.length; i++) { re = Math.max 阅读全文
posted @ 2020-07-06 23:56 牛有肉 阅读(143) 评论(0) 推荐(0) 编辑
摘要:定义 G(b,e) 为 b 到 e 之间的元素可以组成的所有二叉搜索树。 在 b ,e 之间选出一个元素作为根节点, 则以该元素为根的所有可能的二叉搜索树为 G(b,i-1) ,G(i+1,e) 的笛卡尔积。 寻找顶层问题本身的递归结构,走的弯路最少。 public final List<TreeN 阅读全文
posted @ 2020-07-06 23:07 牛有肉 阅读(160) 评论(0) 推荐(0) 编辑
摘要:public final boolean isSubPath(ListNode head, TreeNode root) { if (root == null) { return false; } Stack<TreeNode> stack = new Stack<TreeNode>(); stac 阅读全文
posted @ 2020-07-05 22:05 牛有肉 阅读(151) 评论(0) 推荐(0) 编辑
摘要:两个关键点,一是在滑动窗口内查找元素, 二是在区间内查找元素。 滑动窗口内查找元素可以使用哈希表维护滑动窗口,保持 O(1) 的查询效率。 区间内查找元素可以使用有序的数据结构,查找出与元素相邻的前后两个元素,判断他们是否在区间内。 /** * @Author Niuxy * @Date 2020/ 阅读全文
posted @ 2020-07-05 21:11 牛有肉 阅读(144) 评论(0) 推荐(0) 编辑
摘要:巧用数据结构,空间换时间。 /** * @Author Niuxy * @Date 2020/7/4 11:17 下午 * @Description 朴素解法 O(N * min(K,nums.length-N)) */ public boolean containsNearbyDuplicate0 阅读全文
posted @ 2020-07-04 23:32 牛有肉 阅读(171) 评论(0) 推荐(0) 编辑
摘要:回溯解法: private List<List<Integer>> anList = new LinkedList<List<Integer>>(); public final List<List<Integer>> combinationSum3(int k, int n) { combinati 阅读全文
posted @ 2020-07-03 13:12 牛有肉 阅读(178) 评论(0) 推荐(0) 编辑
摘要:直接挑战 O(1) 空间复杂度解法,双指针尾插法: /** * @Author Niuxy * @Date 2020/7/2 9:16 下午 * @Description 双指针尾插法 */ public void merge(int[] nums1, int m, int[] nums2, int 阅读全文
posted @ 2020-07-02 00:24 牛有肉 阅读(178) 评论(0) 推荐(0) 编辑
摘要:暴力求解时找到正确的遍历解空间的方式很重要。有的遍历方式本身具有递归结构,同时存在重复子问题,可以方便的做优化。 寻找函数的定义取决于我们看问题的角度,这与生活中解决问题的思路是相通的。 在剖析问题时,应该从多种角度去观察问题: 从整体到局部、局部到整体的视角转化;关键逻辑的取逆,比如极大化极小、极 阅读全文
posted @ 2020-07-01 16:52 牛有肉 阅读(239) 评论(0) 推荐(0) 编辑
摘要:记忆化递归解法: //结果计数 int an = 0; /** * @Author Niuxy * @Date 2020/6/30 10:38 下午 * @Description 外部循环,以每个元素开头的子串 * 内部循环,以每个元素结尾的子串 * 就可以遍历到所有长度大于 1 的可能的子串 */ 阅读全文
posted @ 2020-06-30 23:10 牛有肉 阅读(169) 评论(0) 推荐(0) 编辑
摘要:回溯算法: public final boolean exist(char[][] board, String word) { if (board == null || word == null || word.length() > board.length * board[0].length) { 阅读全文
posted @ 2020-06-30 22:04 牛有肉 阅读(177) 评论(0) 推荐(0) 编辑
摘要:暴力解法: public final boolean canPartition1(int[] nums) { //边界 if (nums == null || nums.length < 2) { return false; } //剪枝 int sum = 0; int max = 0; for 阅读全文
posted @ 2020-06-30 20:52 牛有肉 阅读(230) 评论(0) 推荐(0) 编辑
摘要:记忆化递归: int max = 0; public int lenLongestFibSubseq(int[] A) { int[][] cache = new int[A.length][A.length]; for (int i = 0; i < A.length - 1; i++) { fo 阅读全文
posted @ 2020-06-28 23:47 牛有肉 阅读(240) 评论(0) 推荐(0) 编辑
摘要:借助全局变量 max 存储全局最优解,遍历以所有节点为头结点的子树。 static final int LEFT = -1; static final int RIGHT = 1; int max = 0; public final int longestZigZag(TreeNode root) 阅读全文
posted @ 2020-06-28 21:18 牛有肉 阅读(281) 评论(0) 推荐(0) 编辑
摘要:解题分两步。第一步从后向前遍历,对于每个元素,寻找位于其后且大于该元素的最小值与其交换位置;第二步将交换位置元素的后续元素进行升序排列。 /** * @Author Niuxy * @Date 2020/6/27 12:04 上午 * @Description 从后开始,将更后面的且大于该元素的最小 阅读全文
posted @ 2020-06-27 00:22 牛有肉 阅读(129) 评论(0) 推荐(0) 编辑
摘要:双指针解法为两个指针,一个指向头元素,一个指向尾元素。两个指针逐步向中间靠拢并比较路过的元素: /** * @Author Niuxy * @Date 2020/6/23 8:22 下午 * @Description 双指针 */ public final boolean isPalindrome( 阅读全文
posted @ 2020-06-24 00:06 牛有肉 阅读(115) 评论(0) 推荐(0) 编辑
摘要:只需要遍历一次,一旦遇到不相等的字符,比较剩余字符即可。 public static boolean oneEditAway(String first, String second) { int firstLen=first.length(); int secondLen=second.length 阅读全文
posted @ 2020-06-22 23:54 牛有肉 阅读(174) 评论(0) 推荐(0) 编辑

上一页 1 ··· 3 4 5 6 7 8 9 下一页