本文目錄一覽:
- 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)}
格子覆蓋問題(擴展)
我們可以用2×1 的小矩形橫着或者豎著去覆蓋更大的矩形如8個2×1 的小矩形無重疊的覆蓋一個2×8的大矩形,共有幾種方法
思路:我們先把2×8的覆蓋方法記為f(8)用第一個1×2小矩形去覆蓋大矩形的最左邊兩個選擇,豎著或者橫着放,當豎著放,右邊還剩下2×7的區域,它的覆蓋方法即為f(7)。然後考慮橫着放的情況。當1×2的小矩形橫着放在左上角的時候,左下角必須和橫着放一個1×2的小矩形,而在右邊還剩下2×6的區域,這種情形下的覆蓋方法記為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開始循環
遍歷順序:從前往後
原創文章,作者:HDSIK,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/130551.html