
数据结构与算法
文章平均质量分 61
Lkun_99
学生
展开
-
算法常见技巧
算法技巧 1、回溯算法 (1)全排列 public List<List<Integer>> permute(int[] nums) { int len; if(nums == null || (len = nums.length) == 0){ return null; } // 这里面是结果,没什么好介绍的 List<List<Integer>> ans = new LinkedList<>(); // 这里是路径原创 2021-09-15 14:20:15 · 420 阅读 · 0 评论 -
可移除字符的最大数目
二分错题 1898. 可移除字符的最大数目 难度中等12 给你两个字符串 s 和 p ,其中 p 是 s 的一个 子序列 。同时,给你一个元素 互不相同 且下标 从 0 开始 计数的整数数组 removable ,该数组是 s 中下标的一个子集(s 的下标也 从 0 开始 计数)。 请你找出一个整数 k(0 <= k <= removable.length),选出 removable 中的 前 k 个下标,然后从 s 中移除这些下标对应的 k 个字符。整数 k 需满足:在执行完上述步骤后, p原创 2021-09-15 14:16:38 · 199 阅读 · 0 评论 -
动态规划lc题
动态规划 746. 使用最小花费爬楼梯 难度简单 数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。 您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。 示例 1: 输入: cost = [10, 15, 20] 输出: 15 解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。 示例 2:原创 2021-09-15 14:15:41 · 740 阅读 · 0 评论 -
DFS常见算法
DFS 78. 子集 难度中等1101 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 示例 2: 输入:nums = [0] 输出:[[],[0]] 提示: 1 <= nums.length <= 10 -10 <= nums[i] <原创 2021-09-15 14:14:52 · 452 阅读 · 0 评论 -
KMP算法
KMP算法 1、相关知识 主串:需要匹配的字符串 模式串:去匹配的字符串 前缀:包括起点不包括终点的字符串 后缀:不包括起点包括终点的字符串 next数组:主串和模式串不匹配的时候,模式串回退的位置 next[j]: 以j结尾的后缀和以1开始的前缀相同字符的个数 2、求next数组模板 们定义char[] chs数组从0开始,chs[1] = 0 private void getNext(char[] chs, int[] next,int n){ for(int i = 2原创 2021-09-15 14:12:28 · 85 阅读 · 0 评论