
算法刷题小模版
本专栏主要记录在刷题过程中对一些经典问题所总结出来的模板
西瓜程序设计
在职全栈开发工程师
展开
-
Java求子集的方法
问题给你一个整数数组 nums ,数组中的元素互不相同(也可以相同) 。返回该数组所有可能的子集(幂集)。解集可以包含重复的子集。你可以按任意顺序返回解集。方法方法一:枚举可以先new一个list,里面的元素还是list。我们每次将一个元素向list里面的每个list中添加后重新放入list中。直至循环结束class Solution { public List<List<Integer>> subsets(int[] nums) { List&原创 2021-10-17 20:18:05 · 1492 阅读 · 0 评论 -
背包系列问题详解
背包问题0-1背包问题题目给你一个可装载重量为 W 的背包和 N 个物品,每个物品有重量和价值两个属性。其中第 i 个物品的重量为 weight[i],价值为 value[i],现在让你用这个背包装物品,最多能装的价值是多少?样例:N = 3, W = 4wt = [2, 1, 3]val = [4, 2, 3]结果:6解释:选择前两件物品装进背包,总重量 3 小于 W,可以获得最大价值 6。Java代码实现模板:public class Main{ public原创 2022-05-02 13:48:56 · 675 阅读 · 0 评论 -
八大排序的思想及其代码
插入排序1.直接插入排序时间复杂度:最好O(n) 、最坏O(n2) 、平均O(n2)稳定public class Main{ public static void main(String[] args) { int[] nums={4,5,8,7,9,6,3,2,1}; int len=nums.length; int num=-1; for (int i = 1; i <len; i++) { .原创 2022-04-20 00:23:12 · 1169 阅读 · 0 评论 -
详解树状数组模板——理论和代码的实现
树状数组实际题目(leetcode 307. 区域和检索 - 数组可修改)https://leetcode-cn.com/problems/range-sum-query-mutable/视频讲解https://www.bilibili.com/video/BV1pE41197Qj?spm_id_from=333.337.search-card.all.clickJava代码模板// 上来先把三个方法写出来{ int[] tree; int lowbit(int原创 2022-04-05 11:41:56 · 345 阅读 · 0 评论 -
详解并查集模板——理论和代码的实现
并查集的理解与实现这里通过一个例子来讲解一下并查集问题我们要判断一个无向图中是否存在环,如果存在的话就返回Ture,否则的话就返回False。代码的实现进行路径路径优化是通过增加一个rank数组来记录根结点对应的数的高度,以此来判断当找到两个要合并的两个根结点的时候,应该将哪一个作为新的根结点,哪一个作为其子树。public class Main { public static void main(String[] args) { //并查集,外加压缩路径进行优原创 2021-11-03 21:08:17 · 207 阅读 · 0 评论 -
区间求和的问题——差分
数组不变,区间查询:前缀和、树状数组、线段树;数组单点修改,区间查询:树状数组、线段树;数组区间修改,单点查询:差分、线段树;数组区间修改,区间查询:线段树。注意:上述总结是对于一般性而言的(能直接解决的),对标的是模板问题。但存在经过一些经过“额外”操作,对问题进行转化,从而使用别的解决方案求解的情况。例如某些问题,我们可以先对原数组进行差分,然后使用树状数组,也能解决区间修改问题。或者使用多个树状数组来维护多个指标,从而实现类似线段树的持久化标记操作。宫水三叶入门题目解析...原创 2022-03-09 16:29:59 · 342 阅读 · 0 评论 -
欧几里得算法求最大公约数、最大公倍数
欧几里得算法求最大公约数、最大公倍数最大公约数(Greatest Common Divisor, GCD),是指2个或N个整数共有约数中最大的一个。a,b的最大公约数记为(a, b)。相对应的是最小公倍数,记为[a, b]。在求最大公约数的几种方法中,欧几里得算法(辗转相除法)最为出名:计算(a, b),a<b, 若b是0,则最大公约数为a;否则。将a除以b得到余数r,a和b的最大公约数就是b和r的最大公约数,即:(a, b) = (b, r)求最大公约数代码public static原创 2022-02-10 09:11:45 · 759 阅读 · 0 评论 -
二分查找算法模板及其细节
二分查找算法模板及其细节本文就来探究几个最常用的二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界。而且,我们就是要深入细节,比如while循环中的不等号是否应该带等号,mid 是否应该加一等等。分析这些细节的差异以及出现这些差异的原因,保证你能灵活准确地写出正确的二分查找算法。一、二分查找的框架int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { i原创 2021-12-29 16:23:24 · 164 阅读 · 0 评论