算法
算法理解
folinggg
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法整理6-深度优先搜索
什么是深度优先搜索? 优先向子树进行搜索 深度优先搜索解决 子集/组合 排列 三类假设条件,每类中包含对应子集/组合 排列两种类型 元素无重复:nums={1,2,3} 元素可重复:nums={1,1,2} 不可复选:nums[0]、nums[1]、nums[2] 只能选一次 可复选:nums[0]、nums[1]、nums[2] 可多选 核心代码框架 // 回溯算法核心函数,遍历子集问题的回溯树 void backtrack(int[] nums, int start) { // 前序位置,.原创 2022-04-23 11:17:56 · 263 阅读 · 0 评论 -
算法整理5-二叉树
什么是二叉树 每个节点最多具有两个叉 二叉树代码注释 void traverse(TreeNode root){ //前序遍历位置写的代码 traverse(root.left); //中序遍历时写的代码 traverse(root.right); //后序遍历时写的代码 } 二叉树的构建 1.相信你的函数 2.考虑根节点进行的操作,并运用到左右节点中 二叉树的应用 LeetCode: 226. 翻转二叉树 114.二叉树展开为链表 116. 填充每个节点的下一个右侧节点指针 ..原创 2022-03-27 23:11:36 · 531 阅读 · 0 评论 -
算法整理4-二分查找
什么是二分查找 在一个排好序的线性表中查找一个数 【常规】 目标:查找3的下标 【左边界查找】 目标:查找最左侧 3 的下标 【右边界查找】 目标:查找最右侧 3 的下标 二分查找代码注释 【常规】 【左边界查找】 解释里面先默认数在[ ,) 的[ 【右边界查找】 解释里面先默认数在[ ,) 的[ 二分查找的构建 【常规] int binarySearch(int[] nums,int target){ int left = 0,right = nums.length - 1; .原创 2022-03-16 08:34:51 · 2715 阅读 · 1 评论 -
算法整理-3滑动窗口
什么是滑动窗口 在数组上维护一个 [ , ) 左闭右开可滑动的东西 滑动窗口的构建 static String minWindow(String s,String t){ char[] ss = s.toCharArray(); HashMap<Character,Integer> need = new HashMap<>(); HashMap<Character,Integer> window = ..原创 2022-03-05 15:04:32 · 193 阅读 · 0 评论 -
算法整理-2差分数组
什么是差分数组? 差分数组的构建 int[] res = new int[diff.length]; // 根据差分数组构造结果数组 res[0] = diff[0]; for (int i = 1; i < diff.length; i++) { res[i] = res[i - 1] + diff[i]; } 差分数组的应用 Leetcode 区间加法(中等) 航班预订统计(中等) 拼⻋(中等) ...原创 2022-03-05 12:56:45 · 249 阅读 · 0 评论 -
算法整理-1前缀和数组
前缀和是什么? 前缀和数组构建 // 前缀和数组 int[] preSum; /* 输⼊⼀个数组,构造前缀和 */ public NumArray(int[] nums) { // preSum[0] = 0,便于计算累加和 preSum = new int[nums.length + 1]; // 计算 nums 的累加和 for (int i = 1; i < preSum.length; i++) { preSum[i] = preSum[i - 1] + nums[i -.原创 2022-03-05 12:51:33 · 338 阅读 · 0 评论 -
ALGO_23数列
ALGO_23数列题目思路排列问题 题目 思路 提到了进制,就应该在进制上面思考,可以发现,序号写成2进制的形式时,以k进制形式读出,正好对应得到数据。不过这是什么原理呢?有点不太明白,具体代码就很好写了。如下: import java.util.Scanner; public class ALGO_33 { //给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: // 1,3,4,9,10,12,13,原创 2021-04-13 22:40:48 · 179 阅读 · 0 评论 -
ALGO_22数的分法
数的分法题目测试用例解析回溯完整代码动态规划完整代码 题目 测试用例 解析 本题在笔者烦躁的情况下逼着自己去做的,第一次做的时候效果不是很好,想的是动态规划的方法,最终未作出,去睡觉了。早上想着继续做,感觉回溯可行。尝试一下,果真如此,继而又把动态规划的方法写了出来。 回溯 如果告诉你一个数n,分成3份,有多少种方法,你会怎么做? 本着先把题目做出来的想法,笔者会设置i,j,k三个循环变量,j>=i,k>=j。以此保证不会出现1 1 5 与 5 1 1 或1 5 1 重复的情况出现。 想到这原创 2021-04-10 11:56:14 · 226 阅读 · 0 评论 -
贪心算法:跳跃问题
贪心算法:跳跃游戏 跳跃问题1:leetcode55 关键点:求最大距离是否能大于最后一个位置。 bool canJump(vector<int>& nums) { int n = nums.size(); int farthest = 0; for (int i = 0; i < n - 1; i++) { // 不断计算能跳到的最远距离 farthest = max(farthest, i + nums[i]);原创 2021-03-28 14:36:04 · 661 阅读 · 0 评论 -
贪心算法:区间调度-射气球问题
贪心算法:区间调度问题 母问题描述: 在一个会场中,安排活动,给定所有活动的开始时间与结束时间的集合放在数组nums[n][2]中。求问最多能安排几场活动,使每场活动之间的时间不冲突。 public static int intervalSchedule(int[][] intvs){ if (intvs.length==0) return 0; Arrays.sort(intvs, new Comparator<int[]>() {原创 2021-03-28 10:37:23 · 519 阅读 · 0 评论 -
动态规划:完全背包问题
动态规划:完全背包问题 思路:转换成如下: 有一个背包,最大容量为amount,有一系列物品coins,每个物品重量为coins[i],每个物品的重量无限,有多少种方法,能够把背包恰好装满 状态: 1.背包的容量 2.可选择的物品 选择: 装进背包/不装进背包 dp数组定义:若只使用前i个物品,当背包容量为j时,有dp[i][j]种方法可以装满背包。 public static int change(int amount,int[] coins){ int n = coins.le原创 2021-03-27 20:55:56 · 264 阅读 · 0 评论 -
最大子数组和
最大子数组和 /* * 定义以nums[i]为结尾的 最大子数组和 / 最长递增子序列 * */ public class dpMaxChildArraySum { public static void main(String[] args) { } public static int maxSubArray(int[] nums){ int n = nums.length; if (n==0) return 0; int[原创 2021-03-26 13:58:38 · 155 阅读 · 0 评论 -
递归
递归解决思路三要素清楚递归函数的定义结束条件(base case)等价关系 三要素 清楚递归函数的定义 一定要明白函数的定义是什么,不要跳入到递归中,直接拿来主义。 结束条件(base case) 一定有一个base case来结束无限调用。 一般是 if(XXX) return XXX; 等价关系 大问题是怎么通过小问题解决的,一般是除了小问题,其余的操作。 比如需要一个大问题包含两个递归小问题,这两个递归小问题在结束后是怎么联系在一块的。 ...原创 2021-03-16 08:09:57 · 176 阅读 · 0 评论 -
快慢指针
快慢指针1、寻找中点 1、寻找中点 以链表为例 ListNode slow, fast; slow = fast = head; while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; } // slow 指针现在指向链表中点原创 2021-03-14 18:39:41 · 177 阅读 · 0 评论 -
反转链表
public class reverseLinkList { //reverse LinkList 反转整个单链表 public static Node reverse(Node headNode){ if (headNode.getNext()==null) return headNode; Node last = reverse(headNode.getNext()); headNode.getNext().setN原创 2021-03-13 22:50:36 · 167 阅读 · 0 评论
分享