1. 程式人生 > >2017滴滴新銳計劃研發崗面試中的程式設計題

2017滴滴新銳計劃研發崗面試中的程式設計題

二面中遇到了下面兩個程式設計題

  • 走臺階問題(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; } }