编程之美问题
Alex-大伟
坚持写下去,终有一天你会成为大牛。
展开
-
编程之美2.9节之Fibonacci数列
Fibonacci数列形式:F(0) = 0,F(1)=1,F(n)=F(n-1)+F(n-2) if n>1。 求解该数列的第n项有三种方法,其中前两种方法很好理解。主要解释下第三种方法的思路: Fibonacci是二阶递推数列,所以存在一个2*2的矩阵A,使得: (Fn,Fn−1)=(Fn−1,Fn−2)∗A=...=(F1,F0)∗An−1(F_n, F_{n-1}) = (F_{n-1原创 2016-04-26 16:13:21 · 562 阅读 · 0 评论 -
编程之美1.8:小飞的电梯调度算法
问题:由于楼层并不高,在繁忙时段,每次电梯从一层往上走时,我们只允许停到其中某一层。所有乘客再从这层去往自己的目的楼层。电梯停在哪一层,能够保证乘客爬楼梯之和最少?import java.util.Scanner;public class BeautyPro18 { /** * @param args */ public static void main(Strin原创 2016-12-02 13:52:10 · 1210 阅读 · 0 评论 -
[编程题]最长递增子序列
对于一个数字序列,请设计一个复杂度为O(nlogn)的算法,返回该序列的最长上升子序列的长度,这里的子序列定义为这样一个序列U1,U2…,其中Ui < Ui+1,且A[Ui] < A[Ui+1]。 给定一个数字序列A及序列的长度n,请返回最长上升子序列的长度。 测试样例: [2,1,4,3,1,5,6],7 返回:4package alex.suda.dp;import java.util.原创 2016-10-06 13:37:17 · 1045 阅读 · 0 评论 -
编程之美 3.9 :重建二叉树
问题描述:给定一个前序遍历和一个中序遍历,重建一棵二叉树。如:前序:a b d c e f中序:d b a e c f思路:根据前序,找出根节点a,然后根据中序,可以找出根节点a的左右子树,然后递归求a的左子树前序b d跟中序d b,a的右子树前序c e f跟中序e c fpackage suda.alex.chapter3;import java.util.Scanner;public class原创 2016-10-01 16:33:23 · 774 阅读 · 0 评论 -
编程之美3.8: 求二叉树中节点的最大距离
问题描述:如果把二叉树看成一个图,父子节点之间的连线看成双向的,定义“距离”为两个节点之间边的个数。求二叉树中相距最远的两个节点的距离。思路:相距最远的两个节点一定是叶子节点,且这两个叶子节点的路径有三种情况:最大距离的两个节点都在左子树中(右图)都在右子树中最大路径经过根节点root(此时是左子树高度 与 右子树高度 之和 + 2)(左边的图)图中红色连接线表示最长路径。package s原创 2016-10-01 13:35:14 · 709 阅读 · 0 评论 -
编程之美2.15子数组之和的最大值(二维)
问题描述:求二维数组(矩阵)的子矩阵之和的最大值。import java.util.Scanner;public class BeautyPro215 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub原创 2016-09-28 16:01:43 · 525 阅读 · 0 评论 -
编程之美2.18 数组分割
问题描述:有一个无序、元素个数为2n的正整数数组,要求:如何能把这个数组分割为元素个数为n的两个数组,并使两个子数组之和最接近。import java.util.Scanner;public class BeautyPro218 { /** * @param args */ public static void main(String[] args) {原创 2016-09-28 11:38:09 · 1127 阅读 · 0 评论 -
编程之美3.1:字符串移位包含的问题
问题描述:给定两个字符串s1和s2,要求判定s2能否能被s1做循环移位得到的字符串包含。例如,s1=AABCD,s2=CDAA,返回true,给定s1=ABCD,s2=ACBD,返回false。思路1:找出所有循环移位,逐个进行字符串匹配。n*字符串匹配的复杂度。kmp可以做到线性,因此总的复杂度为n^2.思路2:s1复制一下,变成s1s1,如s1=ABCD,变成ABCDABCD,用它进行匹配。pa原创 2016-09-23 10:21:41 · 948 阅读 · 0 评论 -
左旋转字符串
题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!import java.util.Scanner;public class LeftRotateSt原创 2016-05-11 19:42:36 · 385 阅读 · 0 评论 -
连续子数组的最大和
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?思路大概有3种。原创 2016-05-11 12:55:24 · 606 阅读 · 0 评论 -
编程之美2.10之寻找数组中的最大值和最小值
问题描述:寻找一个数组中的最大值和最小值。 方法一:扫描一遍数组,找出最大和最小方法二:将相邻两个数分为一组,较大的数放在偶数位、较小的数放在奇数位。再分别从这两部分中找出最大值和最小值。方法三:将相邻两个数分为一组,用Max和Min变量存储当前的最大值和最小值。同一数组比较之后,不交换次序,而是将下一个两个数的较大值和Max比较,较小数和Min比较。以此往后执行。方法四:采用分治思想,分别求前后原创 2016-04-27 15:43:43 · 1093 阅读 · 0 评论 -
编程之美2.7节求最大公约数问题
用java写的关于求最大公约数的三种方法:package suda.alex.chapter2;import java.util.*;public class Gcd { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = n原创 2016-04-26 13:15:33 · 660 阅读 · 0 评论 -
编程之美2.10 寻找数组中的最大值和最小值
//思路:分治思想。分别求出前后N/2个数的Min和Max。import java.util.Scanner;public class BeautyPro210 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method原创 2016-12-06 09:15:21 · 622 阅读 · 0 评论