随笔分类 - 算法
java基础算法学习、菜鸟
摘要:动态规划是一种算法思想,主要用于解决最优化问题,即在满足一定约束条件下,求解某个指标的最大值或最小值。动态规划通常用于具有重叠子问题和最优子结构性质的问题,可以通过将问题分解成子问题来求解,从而避免重复计算。 应用场景,例如: 1. 最长公共子序列问题:给定两个字符串,求它们的最长公共子序列。 2.
阅读全文
摘要:思路参考:最长公共子序列 public class Solution { /** * longest common substring * @param str1 string字符串 the string * @param str2 string字符串 the string * @return st
阅读全文
摘要:题目:给定两个字符串 str1 和 str2,返回这两个字符串的最长公共子序列的长度解释:一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串,如下图示: 也就是说对于以下两个字符串 str1 和 str2,其最长
阅读全文
摘要:题目描述 给定一个数组arr,返回子数组的最大累加和 例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12. [要求] 时间复杂度为O(n),空间复杂度为O(1) public class Solution
阅读全文
摘要:问题描述 设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。 输入格式: 输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工作费用。 输出格式: 将计算出的
阅读全文
摘要:一、算法含义 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思路是:暴力算法的改进,在通过遍历所有路径基础上,通过回溯(往回找)筛除不可能的路径,提高效率。 二、解题步骤: 1.确定一个解空间,它包含问题的解;2.利用适于搜索的方法组织解空间;3.利用深度优先法搜索解空间;4.
阅读全文
摘要:问题描述 : 给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案。 输入格式: 第 1 行是1 个正整数 a。第 2 行是正整数k。 输出格式: 输出最小数。 输入样例:
阅读全文
摘要:基本要素: 贪心选择:在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 最优子结构:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。 过程: 过程: 建立数学模型来描述问题; 把求解的问题分成若干个子问题;
阅读全文
摘要:一、问题描述 设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变换为字符串B所用的最少字符操作数称为字符串A到 B的编辑距离,记为d(A,B)。 对于给定的字符串A和字符
阅读全文
摘要:一、含义 动态规划:多阶段(两段)最优化决策解决问题的过程就称为动态规划。 二、基本步骤 1、描述优解的结构特征。 2、递归地定义一个最优解的值。 3、自底向上计算一个最优解的值。 4、从已计算的信息中构造一个最优解。 三、何时采用动态规划 (1) 最优化原理:问题的最优解包含的字问题也有最优解,就
阅读全文
摘要:一、 问题描述:已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数,要求时间复杂度nlogn。 二、 输入格式:输入分三行。第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。 输出格式:在一行中输出两个输入
阅读全文
摘要:二分法如二分搜索 二分搜索:是一种通过不断折半查找从而减小问题的规模的算法,能够提高查找的效率。这个算法有两个要求:顺序结构存储和存储的数据必须有序排列。 二分搜索理解:把问题分三部分,左半部分、中间值、右半部分。将目标数值与中间值比较,若小于中间则与左半部分比较,若大于中间则与右半部分比较,等于中
阅读全文