劍指offer 簡單題 一

2021-10-06 08:42:07 字數 1600 閱讀 1562

因為這幾題太簡單了,總結一下思路就行了。

知識點:陣列

其實就是for迴圈加個判斷條件。牛客上有人呼叫了一些大數之類的api,感覺沒啥必要。。為了ac可以,面試的時候這樣是真的秀逗了。

給定乙個陣列a[0,1,...,n-1],請構建乙個陣列b[0,1,...,n-1],其中b中的元素b[i]=a[0]*a[1]*...*a[i-1]*a[i+1]*...*a[n-1]。不能使用除法。(注意:規定b[0] = a[1] * a[2] * ... * a[n-1],b[n-1] = a[0] * a[1] * ... * a[n-2];)
public

int[

]multiply

(int

a)}}

return b;

}

知識點:貪心

我的思路是類似於動態規劃的一種思想。初始化sum[i]=1是一次直接跳完;然後第一次跳1台階,有sum[n-1]種方法;第一次如果跳2的話,有sum[n-2]種方法…以此類推。

但說實話,另一種思路數學規律推導**更好。

乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。
public

intjumpfloorii

(int target)

}return sum[target-1]

;}

另一種思路:

因為n級台階,第一步有n種跳法:跳1級、跳2級、到跳n級

跳1級,剩下n-1級,則剩下跳法是f(n-1)

跳2級,剩下n-2級,則剩下跳法是f(n-2)

所以f(n)=f(n-1)+f(n-2)+…+f(1)

因為f(n-1)=f(n-2)+f(n-3)+…+f(1)

所以f(n)=2*f(n-1)

知識點:樹

遞迴寫一下交換左右子樹即可,注意終止條件

操作給定的二叉樹,將其變換為源二叉樹的映象。

public

void

mirror

(treenode root)

if(root.right != null)

}}

知識點:佇列 棧

stack1專門用來入棧,stack2專門用來出棧。

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

stack

stack1 =

newstack

(); stack

stack2 =

newstack

();public

void

push

(int node)

} stack1.

push

(node);}

public

intpop()

}return stack2.

pop();

}

劍指offer 簡單題

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。思路 變向隻變一次,s2空了之後再把s1全部搬過去 class solution int pop key stack2.top stack2.pop return key private stackstack1 sta...

劍指Offer第一題

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路 從數值中間開始查詢,根據題意,二維陣列的左上角是最小值,二維陣列的右下角是最大值,從中間數值查詢是最節約時間的,可以從左下角或者...

劍指offer 第一題

這題思路不難,但是關於二維陣列的邊界問題,差點把我整崩潰 題目描述 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。這題的思路就是找乙個中間值,讓他在陣列查詢...