2017滴滴新銳計劃研發崗面試中的程式設計題
阿新 • • 發佈:2019-02-03
二面中遇到了下面兩個程式設計題
- 走臺階問題(n級臺階,每次只能走1個或者2個臺階–>總共有多少種走法)
- 尋找連續子陣列最大和問題
第一題採用遞迴即可實現,第二題的實現時間複雜度為O(n),具體解法如下:
/**
* 在滴滴軟體研發工程師面試過程中遇到的程式設計題
* Created by liuming on 2017/4/26.
*/
public class 面試程式設計題_滴滴 {
/*******************************************
* 走臺階問題:n級臺階,每次只能走1個或者2個臺階-->總共有多少種走法
*******************************************/
private static int pathCount = 0;
static void findPath(int n) {
if (n - 1 == 0 || n - 2 == 0) {
pathCount++;
}
if (n - 1 > 0) {
findPath(n - 1);
}
if (n - 2 > 0) {
findPath(n - 2);
}
}
/*******************************************
* 尋找連續子陣列最大和問題<br>
* 以索引i結尾的的子陣列最大和有兩種情況(假設以i結尾的子陣列最大和為sum(i)):
* ①若sum(i-1)<0,sum(i-1)+arr[i]<arr[i],最大值為sum(i)=arr[i];
* ②若sum(i-1)>=0,sum(i-1)+arr[i]>=arr{i],最大值為sum(i)=sum(i-1)+arr[i]
*******************************************/
static int findMaxSum(int[] arr) {
int result = arr[0];
int sum = arr[0];
for (int i = 2; i < arr.length; i++) {
if (sum > 0) {
sum += arr[i];
} else {
sum = arr[i];
}
if (result < sum) {
result = sum;
}
}
return result;
}
}