2018阿里秋招線上程式設計題(Java開發工程師)
阿新 • • 發佈:2019-01-10
題目:小猴子下山,沿著下山的路有一排桃樹,每棵樹都結了一些桃子。小猴子想摘桃子,但是又一些條件需要遵守,小瘦子只能沿著下山的方向走,不能回頭,每棵樹最多摘一個,而且一旦摘了一棵樹的桃子,就不能再摘比這棵樹結的桃子少的樹上的桃子,那麼小猴子最多能摘到幾課桃子呢?
距離說明,比如有五棵樹,分別結了10,4,5,12,8棵桃子,那麼小猴子最多能摘3顆桃子,來自於結了4,5,12顆桃子的桃樹。
輸入範例:
5
10
4
5
12
8
輸出範例:
3
看到題第一反應就是最長遞增子序列,學習自《程式設計之美》這本書。
程式碼如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int trees[] = new int[n];
for(int i=0;i<n;i++){
trees[i] = input.nextInt();
}
int MaxP[] = new int[n];
for (int j = 0;j < n;j++){
MaxP[j] = 1;
for(int m = 0;m<j;m++){
if(MaxP[m]+1>MaxP[j]&&trees[j]>trees[m]){
MaxP[j] = MaxP[m] + 1;
}
}
}
int maxPeach = 1;
for(int k = 0;k<n;k++){
if (maxPeach<MaxP[k]){
maxPeach = MaxP[k];
}
}
System.out.println(maxPeach);
}
}
此程式碼執行全部通過,採用了動態規劃法,時間複雜度為