算法
A snicker
努力吧
展开
-
牛客-超级跳
要是为负的话,是Math.max(后一个数为负状态的值,后一个数为正状态的值加上这个负数的值),要是为正的话,是Math.max(后一个数为正状态的值,后一个数为负状态的值加上这个正数的值)。最后是cache[0][1],因为第一个状态一定是正数状态。链接:https://www.nowcoder.com/questionTerminal/2ae94400de4e409c91c3470a95681bfc。初始的时刻是从1开始的,Abby初始的弹跳能力是0,当然我们的Abby总想尽可能的跳的高一些。.....原创 2022-08-27 20:52:58 · 468 阅读 · 1 评论 -
滑动窗口和双指针问题
滑动窗口 滑动窗口的最大值 class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums.length==0){ return nums; }else{ //次数 int count = 0; //输出窗口长度 int length = nums.length原创 2022-03-31 15:25:15 · 327 阅读 · 0 评论 -
经典排序算法
目录:1、冒泡排序2、快速排序3、归并排序桶排序 1、冒泡排序 void bubbleSort(int[] nums) { int N = nums.length; for (int i = 0; i < N - 1; i++) { // 外循环 for (int j = 0; j < N - i - 1; j++) { // 内循环 if (nums[j] > nums[j + 1]) { // 交换 nums[j],原创 2022-03-24 21:14:11 · 1116 阅读 · 0 评论 -
二叉树上面的DFS遍历和BFS遍历总结
DFS遍历使用递归: void dfs(TreeNode root){ if(root == null){ return; } dfs(root.left); dfs(root.right): } BFS遍历使用队列数据结构 void bfs(TreeNode root){ Queue<TreeNode> queue = new ArrayDeque<>(); queue.add(root); while(!queue.isEmpty()){ TreeNode原创 2022-03-23 10:00:07 · 413 阅读 · 0 评论 -
Java编程题中常用api
//String String s; char ch = s.charAt(i); //得到s中的第i个字符 s.toCharArray(); //将字符串转换为字符数组 StringBuffer res = new StringBuffer(); res.append(ch); //添加字符 res.toString(); //转换为String类型 //哈希表 Map<Charactor,Integer> fre = new HashMap<Charactor,Integer&原创 2022-03-22 21:51:15 · 661 阅读 · 0 评论 -
二叉树问题
1、二叉树的前序遍历 前序遍历的输入顺序为:A-B-D-F-G-H-I-E-C 递归法 class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); pre(root,list); return list; } //前序遍历原创 2022-03-22 21:25:48 · 1266 阅读 · 0 评论 -
回溯法—批处理作业调度问题
n个作业{1, 2, …, n}要在两台机器上处理,每个作业必须先由机器1处理,然后再由机器2处理,机器1处理作业i所需时间为ai,机器2处理作业i所需时间为bi(1≤i≤n),批处理作业调度问题要求确定这n个作业的最优处理顺序,使得从第1个作业在机器1上处理开始,到最后一个作业在机器2上处理结束所需时间最少。 例:三个作业{1, 2, 3},这三个作业在机器1上所需的处理时间为(2, 3, 2),在机器2上所需的处理时间为(1, 1, 3),则最佳调度方案是(1, 3, 2)、(3, 1, 2)和(3,原创 2021-06-06 16:39:26 · 1839 阅读 · 0 评论 -
回溯法—组合问题
八皇后问题 在8×8的棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。可以把八皇后问题扩展到n皇后问题,即在n×n的棋盘上摆放n个皇后,使任意两个皇后都不能处于同一行、同一列或同一斜线上。 回溯法求解4皇后问题的搜索过程 代码: int x[100]; //n皇后问题的解 int Place(int k) { //皇后k放到x[k]列是否发生冲突 for (int i = 0; i < k; i++) { //违反约束条件 if (x[i]原创 2021-06-05 19:54:16 · 87 阅读 · 0 评论 -
回溯法—哈密顿回路问题
代码: int arc[10][10]; void Hamiton(int x[], int n) { int i, k; int visited[10]; //假设图中最多有10个顶点 for (i = 0; i < n; i++) { x[i] = 0; //初始化回路的顶点数组和标志数组 visited[i] = 0; } x[0] = 0; //从顶点0出发 visited[0] = 1; k = 1; while (k >= 1) { x...原创 2021-06-05 19:14:40 · 2640 阅读 · 2 评论 -
回溯法—图着色问题
图着色问题描述为:给定无向连通图G=(V, E)和正整数m,求最小的整数m,使得用m种颜色对G中的顶点着色,使得任意两个相邻顶点着色不同。 代码: int n; int color[1000]; //n个顶点的着色情况 int arc[1000][1000]; //存储顶点之间边的情况 int Ok(int k) { //判断顶点k的着色是否发生冲突 for (int i = 0; i < k; i++) { if (arc[k][i] == 1 && colo原创 2021-06-05 17:45:10 · 2205 阅读 · 1 评论 -
贪心法—组合问题
1、背包问题(物品可以分割) 给定n种物品和一个容量为C的背包,物品i的重量是wi,其价值为vi,背包问题是如何选择装入背包的物品,使得装入背包中物品的总价值最大? 应用第三种贪心策略,每次从物品集合中选择单位重量价值最大的物品,如果其重量小于背包容量,就可以把它装入,并将背包容量减去该物品的重量,然后我们就面临了一个最优子问题——它同样是背包问题,只不过背包容量减少了,物品集合减少了。因此背包问题具有最优子结构性质。 算法7.6的时间主要消耗在将各种物品依其单位重量的价值从大到小排序。因此,其时间原创 2021-05-22 14:25:44 · 413 阅读 · 0 评论 -
贪心法—图问题
1、TSP问题 (1)最近邻点策略:从任意城市出发,每次在没有到过的城市中选择最近的一个,直到经过了所有的城市,最后回到出发城市。 设图G有n个顶点,边上的代价存储在二维数组w[n][n]中,集合V存储图的顶点,集合P存储经过的边,最近邻点策略求解TSP问题的算法如下: int n;//顶点的个数 //int arc[100][100]; //各边的代价 int TSP1(int arc[][], int w) { //假设从顶点w出发 int endgCount = 0, TSPLength原创 2021-05-20 20:57:54 · 2811 阅读 · 0 评论 -
算法-动态规划4查找问题-最优二叉查找树
1、基本概念: (1)若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值; (2)若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值; (3 它的左、右子树也分别为二叉排序树 2、示例: 3、动态规划函数: 5、矩阵C和矩阵R: 6、算法: double C[1000][1000]; double R[1000][1000]; double OptimalBST(double p[], int n) { int i, j, k, d; int min, mink, su原创 2021-05-11 21:21:44 · 352 阅读 · 3 评论 -
算法-动态规划3组合问题-最长公共子序列问题
详细讲解的介绍 子序列形式化定义: 给定一个序列X=<x1,x2,x3,x4…,xm>,另一个序列Z=<z1,z2,z3,z4…,zk>,若存在一个严格递增的X的下标序列<i1,i2,i3,…,ik>对所有的1,2,3,…,k,都满足x(ik)=zk,则称Z是X的子序列 比如Z=<B,C,D,B>是X=<A,B,C,B,D,A,B>的子序列 公共子序列定义: 如果Z既是X的子序列,又是Y的子序列,则称Z为X和Y的公共子序列 动态规划求解最长公共子序转载 2021-05-07 14:30:59 · 168 阅读 · 0 评论 -
算法-动态规划3组合问题-最长递增子序列问题
算法-动态规划3-最长递增子序列问题 最长递增子序列问题 LIS问题描述:给出一个数列A,求A的一个长度最大的子数列B,使得B是一个递增数列。 例如: 数列A:5,2,8,6,3,6,9,7 一个递增的子数列为5,8,9; 一个长度最大的递增子数列为2,3,6,9或者2,3,6,7,则其最大长度为4. 代码: //a为原数组,n为数组长度,L为存储最长递增子序列的长度的数组,x[][]为对应的最长子序列 int increate(int a[], int n) { int L[10], x[10][10原创 2021-05-06 20:54:50 · 320 阅读 · 0 评论 -
算法-动态规划3组合问题-0/1背包问题
动态规划与分治法类似,都是把大问题拆分成小问题,通过寻找大问题与小问题的递推关系,解决一个个小问题,最终达到解决原问题的效果。但不同的是,分治法在子问题和子子问题等上被重复计算了很多次,而动态规划则具有记忆性,通过填写表把所有已经解决的子问题答案纪录下来,在新问题里需要用到的子问题可以直接提取,避免了重复计算,从而节约了时间,所以在问题满足最优性原理之后,用动态规划解决问题的核心就在于填表,表填写完毕,最优解也就找到。原创 2021-05-06 19:02:12 · 294 阅读 · 0 评论 -
算法-动态规划2图问题-多段图的最短路径问题
算法-动态规划2-多段图的最短路径问题 多段图的最短路径问题 问题:设图G=(V,E)是一个带权有向图,如果把顶点集合V划分成k个互不相交的子集Vi(2<=k<=n,1<=i<=k),使得E中的任何一条边<u,v>,必有u∈Vi, v∈Vi+m(1<=i<k,1<i+m<=k),则称图G为多段图,称s∈V1为源点, t∈Vk为终点。多段图的最短路径问题为从源点到终点的最小代价路径。 ...原创 2021-05-06 18:21:28 · 1434 阅读 · 0 评论 -
算法-动态规划2图问题-TSP问题
算法-动态规划2-TSP问题 问题: 旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。 设s, s1, s2, …, sp, s是从s出发的一条路径长度最短的简单回路,假设从s到下一个城市s1已经求出,则问题转化为求从s1到s的最短路径,显然s1, s2, …, sp, s一定构成一条从s1到s的最短路径,所以TSP问题是构成最优子结构性质的,用动态规划来求解也是合理的。 代码: #include <iostream> #include <s原创 2021-05-06 17:20:40 · 479 阅读 · 0 评论 -
算法-动态规划1-数塔问题
算法-动态规划 数塔问题 图问题中的动态规划 多段图的最短路径问题 二级目录 二级目录 数塔问题 题意: 下图是一个数塔,从顶部出发在每一个节点可以选择向左或者向右走,一直走到底层,要求找出一条路径,使得路径上的数字之和最大. 算法实现: I. 首先利用一个二维数组data存储数塔的原始数据,然后利用一个中间数组dp存储每一次决策过程中的结果。 II. 初始化dp,将data的最后一层拷贝到dp中。dp[n][j] = data[n][j] (j = 1, 2, …, n) 其中,n为数塔的层数。 III原创 2021-05-06 16:55:25 · 1089 阅读 · 0 评论