![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
算法理解
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 · 147 阅读 · 0 评论 -
算法整理5-二叉树
什么是二叉树每个节点最多具有两个叉二叉树代码注释void traverse(TreeNode root){ //前序遍历位置写的代码 traverse(root.left); //中序遍历时写的代码 traverse(root.right); //后序遍历时写的代码}二叉树的构建1.相信你的函数2.考虑根节点进行的操作,并运用到左右节点中二叉树的应用LeetCode:226. 翻转二叉树114.二叉树展开为链表116. 填充每个节点的下一个右侧节点指针..原创 2022-03-27 23:11:36 · 406 阅读 · 0 评论 -
算法整理4-二分查找
什么是二分查找在一个排好序的线性表中查找一个数【常规】目标:查找3的下标【左边界查找】目标:查找最左侧 3 的下标【右边界查找】目标:查找最右侧 3 的下标二分查找代码注释【常规】【左边界查找】解释里面先默认数在[ ,) 的[ 【右边界查找】解释里面先默认数在[ ,) 的[二分查找的构建【常规]int binarySearch(int[] nums,int target){ int left = 0,right = nums.length - 1; .原创 2022-03-16 08:34:51 · 2570 阅读 · 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 · 85 阅读 · 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 · 146 阅读 · 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 · 202 阅读 · 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 · 72 阅读 · 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 · 99 阅读 · 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 · 467 阅读 · 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 · 362 阅读 · 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 · 142 阅读 · 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 · 75 阅读 · 0 评论 -
递归
递归解决思路三要素清楚递归函数的定义结束条件(base case)等价关系三要素清楚递归函数的定义一定要明白函数的定义是什么,不要跳入到递归中,直接拿来主义。结束条件(base case)一定有一个base case来结束无限调用。一般是if(XXX) return XXX;等价关系大问题是怎么通过小问题解决的,一般是除了小问题,其余的操作。比如需要一个大问题包含两个递归小问题,这两个递归小问题在结束后是怎么联系在一块的。...原创 2021-03-16 08:09:57 · 96 阅读 · 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 · 94 阅读 · 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 · 89 阅读 · 0 评论