买卖股票的最佳时机 II

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算最大的利润。你可以尽可能地完成更多的交易(多次买卖股票)。然而你不能同时参与多个交易(你必须在再次购买前出售股票)。

 1 package com.company;
 2 
 3 import java.util.HashMap;
 4 
 5 public class Main {
 6 
 7     public static void main(String[] args) {
 8         // write your code here
 9         int[] nums = {1, 3, 1, 5, 1, 8};
10         Solution solution = new Solution();
11         System.out.println("maxProfit " + solution.maxProfit(nums));
12     }
13 
14     static class Solution {
15         public int maxProfit(int[] nums) {
16             HashMap<Integer, Integer> map = new HashMap<>();
17             if (nums.length <= 1) {
18                 return 0;
19             } else {
20                 int i = 0, j = 1;
21                 for (; j < nums.length; ) {
22                     if (nums[j - 1] <= nums[j]) {
23                         if (j + 1 < nums.length) {
24                             j++;
25                         } else {
26                             map.put(i, j);
27                             break;
28                         }
29                     } else {
30                         map.put(i, j - 1);
31                         i = j;
32                         j = j + 1;
33                     }
34                 }
35             }
36             int count = 0;
37             for (HashMap.Entry<Integer, Integer> entry : map.entrySet()) {
38                 int tmp = nums[entry.getValue()] - nums[entry.getKey()];
39                 count = count + tmp;
40             }
41             return count;
42         }
43     }
44 }

       该问题其实可以理解为寻找数组中 有N个增长子序列的问题,目前小马是这么理解的,也依照这个去写代码。但目前时间效率不高。

猜你喜欢

转载自www.cnblogs.com/Onlyou/p/8888411.html