#算法的乐趣

算法笔记_032:最长回文串(Java)

/目录1问题描述2解决方案2.1中心扩展法2.2Manacher算法给定一个字符串,求它的最长回文子串的长度。  此处,首先枚举出回文串的中心位置,然后,再在该位置上分别向左和向右扩展,记录并更新得到的最长回文串的长度。具体代码如下:packagecom.liuzhen.string_1;impor...

算法笔记_033:十六进制转八进制(Java)

/目录1问题描述2解决方案2.1注意问题2.2具体实现代码 具体问题描述  给定n个十六进制正整数,输出它们对应的八进制数。输入格式  输入的第一行为一个正整数n(1<=n<=10)。  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过...

算法笔记_034:大整数乘法(Java)

/目录1问题描述2解决方案2.1蛮力法计算两个大整数相乘的结果。  packagecom.liuzhen.chapter5;importjava.math.BigInteger;publicclassBigNumber{/**参数A:进行乘法运算的大整数A,用字符串形式表示*参数B:进行乘法运算的另...

算法笔记_035:寻找最小的k个数(Java)

/目录1问题描述2解决方案2.1全部排序法2.2部分排序法2.3用堆代替数组法2.4线性选择算法有n个整数,请找出其中最小的k个数,要求时间复杂度尽可能低。先对这n个整数进行快速排序,在依次输出前k个数。具体代码如下:packagecom.liuzhen.array_2;publicclassSearchMinK{//...

算法笔记_036:预排序(Java)

/目录1问题描述2解决方案2.1检验数组中元素的唯一性2.2模式计算在计算机科学中,预排序是一种很古老的思想。实际上,对于排序算法的兴趣很大程度上是因为这样一个事实:如果列表是有序的,许多关于列表的问题更容易求解。显然,对于包含了排序操作,这种算法的时间效率依赖于所选用的排序算法的效率。对于预排序的具体思想应用请参考下...
代码星球 ·2021-02-09

算法笔记_037:寻找和为定值的两个数(Java)

/目录1问题描述2解决方案2.1排序夹逼法输入一个整数数组和一个整数,在数组中查找两个数,满足他们的和正好是输入的那个整数。如果有多对数的和等于输入的整数,输出任意一对即可。例如,如果输入数组[1,2,4,5,7,11,15]和整数15,那么由于4+11=15,因此输出4和11。首先将整数数组,使用合并排序进行从小打到...

算法笔记_038:特殊回文数(Java)

/目录1问题描述2解决方案2.180分解法2.2 网友标答解法问题描述  123321是一个非常特殊的数,它从左边读和从右边读是一样的。  输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。输入格式  输入一行,包含一个正整数n。输出格式  按从小到大的顺序输出满足条件的整数,每个...

算法笔记_039:杨辉三角形(Java)

/目录1问题描述2解决方案问题描述杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。  它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。  下面给出了杨辉三角形的前4行:     1    11   121  1331...

算法笔记_040:二进制幂(Java)

/目录1问题描述2解决方案2.1从左至右二进制幂2.2从右至左二进制幂使用n的二进制表示,计算a的n次方。此方法计算a的n次方具体思想,引用《算法设计与分析基础》第三版一段文字介绍:  具体代码如下:packagecom.liuzhen.chapter6;importjava.util.ArrayL...
代码星球 ·2021-02-09

算法笔记_041:寻找和为定值的多个数(Java)

/目录1问题描述2解决方案输入两个整数n和sum,要求从数列1,2,3,...,n中随意取出几个数,使得它们的和等于sum,请将其中所有可能的组合列出来。上述问题是典型的背包问题的应用,即先找出n个数的所有组合,再在这些组合中寻找组合数相加之和等于sum的组合,并依次输出这些组合中的数。具体代码如下:packageco...

算法笔记_042:求最小公倍数(Java)

/目录1问题描述2解决方案何为最小公倍数?能同时被数字m和数字n整除的最小整数。例如,24和60的最小公倍数等于120。下面请编写相关函数实现求取数字m和n的最小公倍数。关于本文求解最小公倍数的思想,来自于《算法设计与分析基础》第三版上一段讲解,具体如下: 具体代码如下:packagecom.liuzhen....

算法笔记_043:最大连续子数组和(Java)

/目录1问题描述2解决方案2.1蛮力枚举法2.2动态规划法给定一个整数数组,数组里可能有正数、负数和零。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。例如,如果输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},那么输出为该子数...

算法笔记_044:表达式计算求值(Java)

/目录1问题描述2解决方案问题描述  输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。输入格式  输入一行,包含一个表达式。输出格式  输出这个表达式的值。样例输入1-2+3*(4-5)样例输出-4数据规模和约定  表达式长度不超过100,表达式运算合法且运算过程都在int内进行。 &...

算法笔记_045:币值最大化问题(Java)

/目录1问题描述2解决方案2.1动态规划法给定一排n个硬币,其面值均为正整数c1,c2,...,cn,这些整数并不一定两两不同。请问如何选择硬币,使得在其原始位置互不相邻的条件下,所选硬币的总金额最大。本文所写代码思想参考自《算法设计与分析基础》第三版上一段讲解,具体如下:  具体代码如下:pack...

算法笔记_046:跳台阶问题(Java)

/目录1问题描述2解决方案2.1递归法2.2迭代法一个台阶总共有n级,如果一次可以跳1级,也可以跳2级,求总共有多少种跳法。如果整个台阶只有1级,则显然只有一种跳法。如果台阶有2级,则有两种跳法:一种是分两次跳,每次跳1级;另一种是一次跳2级。推广到一般情况。则可以把n级台阶时的跳法看成是n的函数,记为f(n)。当n&...
首页上一页...1112131415...下一页尾页