因為這幾題太簡單了,總結一下思路就行了。
知識點:陣列
其實就是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 第一題
這題思路不難,但是關於二維陣列的邊界問題,差點把我整崩潰 題目描述 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。這題的思路就是找乙個中間值,讓他在陣列查詢...