zoukankan      html  css  js  c++  java
  • LeetCode 腾讯精选50题-- 买卖股票的最佳时机 II

    贪心算法:

      具体的解题思路如下:

        II 的解题思路可以分为两部分,

          1. 找到数组中差值较大的两个元素,计算差值。

          2. 再步骤一最大的元素的之后,继续遍历,寻找差值最大的两个元素

        可以得出的是,遍历指针是一直向着数组的尾部移动的,由于要取得局部的最大差值,这一局部子数组中的元素一定是递增的,所以先找到递增结束的位置,那就是递增位置的起点,然后遍历至此轮递增结束时的位置,这样就得到了一个局部的最优解。

    此思路由于指针只遍历一次,所以时间复杂度为O(N)。

    以下是代码:

    class Solution {
        public int maxProfit(int[] prices) {
            if(prices.length <=1){
                return 0;
            }
            int i=0;
            int sum = 0;
            while (i<prices.length-1){
                while (i < prices.length-1 && prices[i+1] <= prices[i]){
                    i++; //找递增的起始位置
                }
                sum -= prices[i];
    
                while (i < prices.length-1 && prices[i+1] >= prices[i]){
                    i++; //找递增的结束位置
                }
                sum+= prices[i];
            }
    
            return sum;
        }
    }
  • 相关阅读:
    【转】size_t和ssize_t
    WCF订票系统DEMO
    VS2008显示解决方案的方法
    一些好用的开源控件
    SQL 的Over 子句
    Sql2005高效分页语句
    使用winform的showdialog小心内存泄漏
    字符串连接类(Javascript)
    SharpZipLib 的使用
    浅谈持久化
  • 原文地址:https://www.cnblogs.com/Kaithy-Rookie/p/11316976.html
Copyright © 2011-2022 走看看