1. 程式人生 > >2018阿里秋招線上程式設計題(Java開發工程師)

2018阿里秋招線上程式設計題(Java開發工程師)

這裡寫圖片描述

題目:小猴子下山,沿著下山的路有一排桃樹,每棵樹都結了一些桃子。小猴子想摘桃子,但是又一些條件需要遵守,小瘦子只能沿著下山的方向走,不能回頭,每棵樹最多摘一個,而且一旦摘了一棵樹的桃子,就不能再摘比這棵樹結的桃子少的樹上的桃子,那麼小猴子最多能摘到幾課桃子呢?
距離說明,比如有五棵樹,分別結了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); } }

此程式碼執行全部通過,採用了動態規劃法,時間複雜度為O(n2),還有時間複雜度更小的程式碼,但是當時就只能想到這些了。