随笔分类 - 算法学习
算法学习
摘要:算法学习——二分查找 注意点 1. 二分查找的前提是有序的数组 2. 建议使用[start,end)的区间寻找,符合规范 3. 使用的是递归法 递归的人口 递归的出口 private static int find(int[] temp, int start, int end, int x) { i
阅读全文
摘要:算法描述 快速排序 算法思路 1. 快速排序算法的基本思路为 从数组中选择一个数为基准数,之后,将比基准数小的数放在左边,比基准数大的数放在右边(分为了两个区),之后将左边(小于基准数)与右边(大于基准数)再次进行上述操作,一直重复直到无法再分为止 2. 用户输入n,使用随机数产生n个数放入到数组a
阅读全文
摘要:算法描述 在一个n行的点数值三角形中,寻找从顶点开始每一步可沿着左斜或者右斜向下直到到达底端,使得每个点上的数值之和为最小 右图为一个4行的点数值三角形 算法思路 1. 接收用户输入行数n 1. 使用一个二维数组 来存放各个点上的数值,数值可以由用户输入或者是随机生成 2. 定义一个二维数组(用来存
阅读全文
摘要:算法描述 两艘船各自可装载重量为c1,c2,n个集装箱,各自的重量为w[n],设计一个可以装载的方案,使得两艘船装下全部集装箱 算法思路 1. 将第一艘船尽量装满(第一艘船放的集装箱的重量之和接近c1),剩余的集装箱放入第二艘船,若剩余的集装箱重量之和大于第二艘船,则无解 3. 定义一个一维数组,
阅读全文
摘要:算法描述 某人给6个朋友每个人都写了一封信,同时写了这6个朋友地址的信封,有多少种投放信笺的方法,使得每封信与信封上的收信人都不相符? 算法思路 1. 6封信可能出现的结果: 所有的信都是在对应的信封中,也就是所有的信都放对了信封,这种情况只有一种 部分信放错了信封 全部信都放错了信封 2. 题目要
阅读全文
摘要:算法描述 杨辉三角 算法思路 1. 将杨辉三角看成一个二维数组,开头和末尾都为1 2. 第一行和第二行已经被前面的1给赋值了,所以我们直接从第三行开始赋值, 开始,因为下标是从0开始的, ,也就是等于2,依次递推下去 3. 打印(for循环),每打印出一行则换一行, 我的打印处理没有处理好,如果数组
阅读全文
摘要:算法描述 五个水手来到一个岛上,采了一堆椰子后,因为疲劳都睡着了。一段时间后,第一个水手醒来,悄悄地将椰子等分成五份,多出一个椰子,便给了旁边的猴子,然后自己藏起一份,再将剩下的椰子重新合在一起,继续睡觉。不久,第二名水手醒来,同样将椰子了等分成五份,恰好也多出一个,也给了猴子。然而自己也藏起一份,
阅读全文
摘要:算法描述 汉诺塔问题 如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数 算法思路 1. 1个盘的时候,只需要移动1次即可达成目标, )(步骤一
阅读全文
摘要:算法描述 阶乘 算法思路 n = n (n 1) 算法实现 Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); scanner.close(); int result = jiechen(n); System.ou
阅读全文
摘要:算法描述 猴子吃桃 有n个桃子,猴子第一天吃了一半,觉得不过瘾,又多吃了一个,第二天把剩下的桃子吃了一半,又多吃了一个,到第十天的时候,恰好剩下了1个桃子,求n 算法思路 1. 这里采用递推的思路,从后面往前推即可 n n/2 1=1 化简可得 n= (i + 1 ) 2 题目是十天,递推十次即可获
阅读全文
摘要:算法描述 币种统计 单位给每一位员工发工资(精确到元),为了保证不临时换零钱,使得每个员工取款的张数最少,在取工资前统计所有员工所需要的各种票面的张数(约定票种为100,50,20,10,5,2,1元),并验证币种统计是否正确 算法思路 1. 算法描述其实是省略了要求,用户肯定是要输入员工数以及各位
阅读全文
摘要:算法描述 取数游戏:A与B玩取数游戏,随机产生的2n个整数排成一列,只显示两端的整数,只有当A或B取完数会显示下一个数或者是前一个数(若是取末尾的数) A的取数策略:采用贪心策略,每次取数取两个数中最大的那个数 B的取数策略:当两个数相差较大,取大的那个数,若相差为1,则在这两个数中随意取一个数 模
阅读全文
摘要:算法描述 已知递推数列: a(1)=1 a(2i)=a(i)+1 a(2i+1)=a(i)+a(i+1) (i为正整数) 求该数列的第n项,以及前n项中的最大值为多少,其n为多少? 算法思路 1. 采用递推的方法,使用一维数组,从2开始递推,一直递推到n a(i)=a(i/2)+1(n为偶数) a(
阅读全文
摘要:算法描述 已知道n种物品和一个可容纳c重量的背包,第i种物品的重量为wi,价值为pi,装包的时候可以把物品拆开(即可只装每种物品的一部分),设计如何装包,使装包所得整体的价值最高? 算法思路 1. 首先,我们要知道,n种物品以及他们对应的价值,都是由用户输入的 2. 我们使用贪心算法,每一步取最大效
阅读全文
摘要:算法描述 在给定的n位数字,删除其中的k位数字( k linkedList = new LinkedList(); for(int i=0;ilinkedList.get(i+1)){ linkedList.remove(i);//使用链表移出元素 flag++; break;//结束本次循环,跳转
阅读全文
摘要:算法描述 在给定的n位数字,删除其中的k位数字( k 例如 16489657 删除4个数字 首先比较1和6 删除1 得到 6489657 之后,再次比较 6和4 往后推 可得到 689657 以此类推 删除4个数字之后 可得到 9657 这里会有个特殊情况,当一个从大大小的整数输入的时候,我们得从末
阅读全文
摘要:算法描述 一个猴子沿着一座山的n级台阶向上爬,猴子上山一步可跳1级或3级,试求上山的n级台阶有多少种不同的爬法 算法思路 利用递推的思想,猴子在第n级台阶上,它之前可能在第n 1级台阶上或者是在n 3级台阶上,由此可得到递推的公式 f(n)代表着n级台阶共有的爬法 f(1) = 1 f(2)= 1
阅读全文
摘要:算法描述 超级素数定义: 1. m位超级素数本身是素数 2. 最高位开始,去掉一位为m 1位的素数…… 例: 103不是超级素数,去掉最高位的1之后为3,不是有个2位素数,137是一个三位超级素数,去掉最高位1之后为37,37是一个二位素数,去掉3之后为7,7也是一个素数 要求: 输入整数m(1
阅读全文
摘要:算法描述 要求 1. 各个一位数不能是1 2. 只能填写1~9的数字 3. 方框里的数字不能重复 算法思路 1. 首先是将每个一位数和两位数都看成一个数,我们可以使用a,b,c,d,e,f六个数代替 2. 设置for循环,枚举a,b,c,d,e,f这六个数 a 范围2~9(因为是不允许各个一位数为1
阅读全文
摘要:算法描述 一场球赛开始前,售票工作正在紧张的进行中.每张球票为50元,现有m+n个人排队等待购票,其中有m个人手持50元的钞票,另外n个人手持100元的钞票.假设开始售票时售票处没有零钱,求出m+n排队购票, 算法思路 定义函数f(m,n)表示m个人手持50元,n个人手持100元共有的排队种数 2.
阅读全文