本文目录一览:
- 1、青蛙跳(二) 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交: 63 测试通过: 21 描述
- 2、斐波那契数列和青蛙跳问题
- 3、希音java面试有算法吗
- 4、青蛙跳问题(坐标系问题)强人来教我
- 5、JAVA编程题求解?
- 6、JS动态规划——青蛙跳台阶问题
青蛙跳(二) 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交: 63 测试通过: 21 描述
lpln[pdklp[obpfd op[[ [p [pp[[p[p[[iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiimmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmoimuomu ou moiuiu iiiimumviuhginhjvgkrt eynvug yn5ve4yrgvui huievthuy vh5hynt htgvniuhv
斐波那契数列和青蛙跳问题
原文链接:
递归由于调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配内存空间以保存参数、返回地址及临时变量,而且往栈里压入数据和弹出数据都需要时间。
另外,递归中有可能很多计算都是重复的,从而对性能带来很大的负面影响。递归的本质是把一个问题分解成两个或者多个小问题。如果多个小问题存在互相重叠的部分,那么久存在重复的计算。
斐波那契数列
效率最低的解法
青蛙跳题目(扩展)
一只青蛙一次可以跳上一个台阶,也可以跳上2个台阶,求青蛙跳上一个n级台阶共有多少总跳法
思路:如果只有1级台阶,显然只有一种跳法,如果两个台阶,就来有种跳法
一般情况下,我们把n级台阶时的跳法看成是n的函数,记为f(n)。当n2时,第一次跳的时候就有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另一种选择是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目即为f(n-2)因此n级台阶的不同跳法总数是f(n)=f(n-1)+f(n-2)
青蛙跳扩展2
如果一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。。。它也可以跳上n级台阶,此时青蛙跳上一个n级台阶共有集中跳法,用数学的归纳法可以证明是f(n)=2^{(n-1)}
格子覆盖问题(扩展)
我们可以用2x1 的小矩形横着或者竖着去覆盖更大的矩形如8个2x1 的小矩形无重叠的覆盖一个2x8的大矩形,共有几种方法
思路:我们先把2x8的覆盖方法记为f(8)用第一个1x2小矩形去覆盖大矩形的最左边两个选择,竖着或者横着放,当竖着放,右边还剩下2x7的区域,它的覆盖方法即为f(7)。然后考虑横着放的情况。当1x2的小矩形横着放在左上角的时候,左下角必须和横着放一个1x2的小矩形,而在右边还剩下2x6的区域,这种情形下的覆盖方法记为f(6),因此f(8)=f(7)+f(6)也是个斐波那契数列
希音java面试有算法吗
有。常见的如下:
一是字符串,如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法。
二是链表,在Java中,链表的实现非常简单,每个节点Node都有一个值val和指向下个节点的链接next。链表两个著名的应用是栈Stack和队列Queue。
三是树,这里的树通常是指二叉树,每个节点都包含一个左孩子节点和右孩子节点。
四是排序,五是递归vs.迭代。
六是动态规划,动态规划是解决下面这些性质类问题的技术:一个问题可以通过更小子问题的解决方法来解决(即问题的最优解包含了其子问题的最优解,也就是最优子结构性质)。
有些子问题的解可能需要计算多次(也就是子问题重叠性质)。子问题的解存储在一张表格里,这样每个子问题只用计算一次。需要额外的空间以节省时间。爬台阶问题完全符合上面的四条性质,因此可以用动态规划法来解决。
青蛙跳问题(坐标系问题)强人来教我
假设A、B、C、P各点坐标为(xa,ya),(xb,yb),(xc,yc),(xp,yp)
第一步,青蛙从P点跳到关于A的对称点P1,坐标为:(2xa-xp,2ya-yp);
第二步,青蛙从P1跳到关于B的对称点P2;坐标为:
(2xb-(2xa-xp),2yb-(2ya-yp))
即:(2xb-2xa+xp,2yb-2ya+yp)
第三步,青蛙从P2跳到关于C的对称点P3;坐标为:
(2xc-(2xb-(2xa-xp)),2yc-(2yb-(2ya-yp)))
即:(2xc-2xb+2xa-xp,2yc-2yb+2ya-yp)
第四步,从P3跳到关于A的对称点P4;坐标为:
(2xa-(2xc-2xb+2xa-xp),2ya-(2yc-2yb+2ya-yp))
即:(-2xc+2xb+xp,-2yc+2yb+yp)(关于先C后B点的对称)
第五步:(2xb+2xc-2xb-xp,2yb+2yc-2yb-yp)
即:(2xc-xp,2yc-yp)(关于C点对称)
第六步:(2xc-2xc+xp,2yc-2yc+yp)即:(xp,yp),即P点
因此式6次重复回到P点
因此,青蛙跳完6666步后落在P点位置上。
JAVA编程题求解?
这种作业,最好还是结合书上知识,理解清楚老师布置的目的、怎么实现的
public class Frog {
private String name;
private Integer distance = 0;
//跳跃方法
void jump() {
//随机10-20
int jumpDistance = (int) (10 + Math.random() * (20 - 10 + 1));
this.distance += jumpDistance;
}
//带名字构造方法
Frog(String name) {
this.name = name;
}
public static void main(String[] args) {
Frog a = new Frog("a");
Frog b = new Frog("b");
Frog c = new Frog("c");
Frog d = new Frog("d");
for (int i = 0; i 10; i++) {
a.jump();
b.jump();
c.jump();
d.jump();
}
System.out.println(a.name + "总距离=" + a.distance);
System.out.println(b.name + "总距离=" + b.distance);
System.out.println(c.name + "总距离=" + c.distance);
System.out.println(d.name + "总距离=" + d.distance);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getDistance() {
return distance;
}
public void setDistance(Integer distance) {
this.distance = distance;
}
}
JS动态规划——青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
此类求 多少种可能性 的题目一般都有 递推性质 ,即 f(n)f(n) 和 f(n-1)f(n−1)…f(1)f(1) 之间是有联系的。
设跳上 n 级台阶有 f(n) 种跳法。在所有跳法中,青蛙的最后一步只有两种情况: 跳上 1 级或 2 级台阶。
当为 1 级台阶: 剩 n-1 个台阶,此情况共有 f(n-1) 种跳法;
当为 2 级台阶: 剩 n-2 个台阶,此情况共有 f(n-2) 种跳法。
f(n) 为以上两种情况之和,即 f(n)=f(n-1)+f(n-2) ,以上递推性质为斐波那契数列。本题可转化为 求斐波那契数列第 n 项的值 。
青蛙跳台阶问题: f(0)=1 , f(1)=1 , f(2)=2,;
斐波那契数列问题: f(0)=0 , f(1)=1 , f(2)=1 。
第n阶的数量由前两阶的数量相加而来,故用动态规划。
arr[i]表示第i阶有arr[i]种方法
递推公式:arr[i] = arr[i - 1] + arr[i - 2]
arr数组初始化:arr = [null, 1, 2],arr[0]没有意义,从i=3开始循环
遍历顺序:从前往后