• 初步了解动态规划


    通过两道题来了解

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

    如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

    注意你不能在买入股票前卖出股票。

    输入: [7,1,5,3,6,4]
    输出: 5
    解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
         注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

    此题可以看为  第n天的收益 = max(前n-1天的最大收益,第n天可以得到的最大收益)

    解法:

    class Solution {
        public int maxProfit(int[] prices) {
            if(prices.length<=1){
                return 0;
            }
         
            int min = prices[0];
            int profit =0;
            for(int i=1;i<prices.length;i++){
                
                profit =  Math.max(profit,prices[i]-min);
                min = prices[i]>=min?min:prices[i];
            }
            return profit;
        }
    }

    2.给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

    示例:

    输入: [-2,1,-3,4,-1,2,1,-5,4],
    输出: 6
    解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
    class Solution {
        public int maxSubArray(int[] nums) {
            int res = nums[0];
            int sum = 0;
            for(int i=0;i<nums.length;i++){
                if(sum>0){
                    sum += nums[i];
                }else{
                    sum = nums[i];
                }
                res = Math.max(sum,res);
    
            }
            return res;
        }
    }
  • 相关阅读:
    Redis安装
    mysql 存储过程与存储函数
    mysql 常用函数
    cpu-z笔记本加条子
    centos上网络服务起不来network.service failed
    centos/redhat命令行上传下载文件
    docker删除已经停止的容器
    centos/redhat/ubuntu不同之处
    部署lamp动态网站(图解)
    写交互式脚本时,遇到到报错:not a regular file
  • 原文地址:https://www.cnblogs.com/Noctis/p/10679980.html
Copyright © 2020-2023  润新知