很早就有了要做的想法,但一直沒有能力
今天花了點時間搞搞
結果如下:
核心部分
程式碼
1 公共 List<Result> GetResults(int[] arr)
2 {
3 //輸入有效性檢測
4 if (arr.Length==0)
5 拋出新的NotEnoughInputException();
6
7 List<結果> rlist = new List<結果>();
8
9 //實際侵犯
10
11 //初始化起始位置,將第一點後續結果的起點
12 位置 startP = new Position(Position.EmptyPosition, arr[0]);
13
14 //當前點就成交是最大結果值
15 結果 curResult = new Result(Position.EmptyPosition, startP);
16
17 //為結果清單新增內容
18. 添加(curResult);
19
20 //有一個以上的數據
21 if (arr.長度 > 1)
22{
23 位置curP,nextP;
24 curP=startP;
25 Result temp;//儲存到目前點狀況的結果數據
26 //從第二個點開始逐一判斷
27 for (int i = 1; i < arr.Length; i++)
28{
29 //建構對象
30 nextP = 新位置(curP,arr[i]);
31 temp = new Result(startP, nextP);
32
33 //判斷目前的和是否大於現有結果清單中的數據
34 if (temp.RelativeElevation > rlist[0].RelativeElevation)
35 {//如果大於則清除結果列表,新增目前結果
36.rlist.Clear();
37 rlist.Add(臨時);
38}
39 //判斷當前的和是否存在現有結果清單中的數據
40 else if (temp.RelativeElevation == rlist[0].RelativeElevation)
41{
42 rlist.Add(臨時);
43}
44 //判斷當前是否為新的低點
45 else if(nextP.EndElevation<=startP.StartElevation)
46{
47 開始P = 下一個P;
48}
[第 49 回]
50}
51}
52
53返回r列表;
54}
程式碼還有進一步優化的空間
主體思想是模擬一個不斷爬山的人,爬完一遍後要回答那座山和山谷的相對落差最大
完整程式碼在這裡
主要多用了一些類,呵呵。
局部程式碼有些不好理解,呵呵。
歡迎拍磚