`

动态规划总结(一)

阅读更多
动态规划在算法中属于难的问题了,在leetcode中属于中等偏上难度,但是动规是面试容易问到的,因此掌握基本的动规题目很有必要。下面列举leetcode中用DP处理的题目,其中有些用到贪心算法,就不单列出来了,本质上贪心也是动态规划的一个特例。动态规划重要的是能找出递推式,这需要我们多加练习,需要有一个过程。

有关买卖股票的题目有几道,这里列举前两道题。
1,Best Time to Buy and Sell Stock
给定一个整形数组,第i个元素代表第i天股票的价格。如果我们只能做一次交易,也就是只能买卖一次,如何能得到最大的利益。

我们把它抽象一下,就是从一个数组中找到两个元素,使他们的差最大,但是有一个限定,要考虑顺序,因为必须先买了才可以卖。我们设定一个全局的变量max用来保存最大值,用一个变量profit记录每次比较时的利润,然后与max比较,每次都取最大值。时间复杂度为O(n)。
代码如下:
public class Solution {
    public int maxProfit(int[] prices) {
        int profit = 0;
        int max = 0;
        for(int i = 1; i < prices.length; i++) {
            profit += prices[i] - prices[i - 1];
            if(profit < 0) profit = 0;
            if(profit > max) max = profit;
        }
        return max;
    }
}


2,Best Time to Buy and Sell Stock II
给定一个整形数组,第i个元素代表第i天股票的价格。如果我们可以做多次交易,也就是我们可以买卖多次,如何能得到最大的利益。

与上面的题目相比,不同的是可以买卖多次,当仅可以买卖一次的时候,我们每次保留一个最大值;既然可以买卖多次,那么只要是profit大于零,我们都要把它算到最后的利润里。所以我们只要在profit大于0的时候,将它加入max中就可以了。代码如下:
public class Solution {
    public int maxProfit(int[] prices) {
        int profit = 0;
	int max = 0;
	for (int i = 1; i < prices.length; i++) {
		profit = prices[i] - prices[i-1];
		if(profit > 0) {
			max += profit;
		} else {
			profit = 0;
		}
	}
	return max;
    }
}


3,Triangle
给定一个三角形,找出从top到bottom的最小带权路径,每个元素只能移动到下面与它们相邻的元素。
例如:
[
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]
输出:11    (2 + 3 + 5 + 1 = 11)

三角形计算属于动态规划的经典题目,对于这道题,我们可以采用一个滚动数组,从下往上开始计算,每次保留最小的值,这样一直到三角形的顶点,我们就得到一个最小带权路径了。时间复杂度为O(n^2);
代码如下:
public class Solution {
    public int minimumTotal(List<List<Integer>> triangle) {
        int[] result = new int[triangle.size() + 1];
        for(int i = triangle.size()-1; i >= 0; i--) {
            List<Integer> list = triangle.get(i);
            for(int j = 0; j < triangle.get(i).size(); j++) {
                result[j] = Math.min(result[j], result[j + 1]) + triangle.get(i).get(j);
            }
        }
        return result[0];
    }
}
分享到:
评论

相关推荐

    数据结构动态规划算法总结

    数据结构动态规划算法总结 动态规划是一种重要的算法思想,广泛应用于经济管理、生产调度、工程技术和最优控制等方面。动态规划是解决多阶段决策过程的优化问题的数学方法,由美国数学家R.E.Bellman等人在20世纪50...

    算法动态规划总结(拓展篇)

    从给定的文件标题“算法动态规划总结(拓展篇)”和描述“算法动态规划拓展总结,内含详细解说和代码”中,我们可以提炼出一系列关于动态规划算法的知识点,这些知识点涵盖了动态规划的多种应用及其优化技术。...

    算法动态规划总结(基础篇)

    ### 动态规划基础总结 #### 一、概述 动态规划是一种解决最优化问题的方法,其核心思想是将原问题分解成互相重叠的子问题集合,并存储子问题的解来避免重复计算,最终达到求解原问题的目的。本文将对计算机算法中...

    动态规划总结.doc

    动态规划是一种解决问题的有效方法,尤其在处理具有重叠子问题和最优子结构的复杂问题时。在算法分析与设计中,动态规划算法扮演着至关重要的角色。以下是对动态规划算法的详细阐述,以及如何应用于矩阵连乘问题。 ...

    动态规划 资料 动态规划总结

    本资料主要对动态规划进行了全面的总结,旨在帮助读者深入理解和掌握这一概念。 一、动态规划基础 动态规划的核心是将一个复杂的问题分解为多个相互关联的子问题,然后通过解决这些子问题来求解原问题。它与分治法...

    动态规划实验报告

    实验者刘春云,专业为软件工程,通过这个实验学习并应用了动态规划这一核心的计算机科学概念。实验指导教师为赵晓平,实验时间为2012年2月21日。 **二项式系数** 二项式系数C(n, k)表示从n个不同元素中选取k个元素...

    动态规划题目总结。。。。

    【动态规划】是一种在计算机科学和数学中广泛使用的算法设计技术,主要应用于解决最优化问题。动态规划通过将复杂问题分解成子问题,并利用子问题的最优解来构造原问题的最优解,从而达到解决问题的目的。它的一个...

    动态规划总结

    ### 动态规划总结 #### 1. 按状态类型分类 动态规划问题的核心在于定义合适的状态,根据状态的不同可以将动态规划分为不同的类别。这些分类有助于我们更好地理解和解决问题。 ##### 1.1 编号(长度)动态规划 这...

    pku 动态规划 总结

    这个“PKU之DP试题总结”很可能是北京大学(Peking University,简称PKU)提供的一个资源,汇总了该校涉及动态规划的编程题目,帮助学习者深入理解和掌握这一关键算法。 动态规划的核心思想是将复杂问题分解成若干...

    ACM动态规划总结

    动态规划是一种在计算机科学中广泛使用的算法设计策略,特别是在解决最优化问题时。它通过将一个大问题分解成若干小的子问题,并利用...通过不断练习和总结,参赛者能够更好地掌握动态规划的技巧,提高编程竞赛的成绩。

    动态规划算法笔记总结ZIP分享

    动态规划是一种重要的算法思想,广泛应用于解决复杂优化问题。它通过将大问题分解为相互关联的小问题,并存储每个小问题的解,避免了重复计算,从而达到高效求解的目的。在计算机科学,尤其是算法设计中,动态规划是...

    acm动态规划总结

    动态规划是一种算法思想,主要用来解决具有重叠子问题和最优子结构特性的问题。在ACM竞赛中,动态规划题目是竞赛的核心部分之一,掌握动态规划是解决算法难题的重要技能。在学习动态规划时,常见的题型包括路径计数...

    基于LINGO的优化问题动态规划法求解

    总结来说,基于LINGO的动态规划法是解决复杂优化问题的有效工具,尤其适合教学和实践场景。通过学习和应用,不仅可以理解动态规划的基本概念,还能掌握使用优化软件解决实际问题的方法,这对于提升学生在交通工程等...

    经典动态规划合集_牛人 树形,压缩 老题

    acm动态规划总结 PKU——DP专辑 背包之01 POJ 动态规划总结 背包之01背包、完全背包、多重背包详解 Dynamic+Programming 典型的动态规划,用递归下的记忆化搜索来实现 1088 POJ 动态规划加速原理之四边形不等式 基于...

    运用LINGO解决某些动态规划的问题

    动态规划是一种用于解决多阶段决策过程中的最优化问题的方法,其核心思想是将复杂问题分解为多个子问题,然后递归地求解这些子问题,从而找到整体最优解。在实际应用中,动态规划广泛应用于资源分配、路径规划、库存...

    动态规划总结-by Amber.doc

    总结来说,动态规划是一个强大的工具,它能够处理具有重叠子问题和最优子结构的复杂问题。通过对不同状态类型的深入理解和实践,我们可以解决各种各样的问题,从经典的最短路径、最长公共子序列到更复杂的树型结构...

    《动态规划算法实验》实验报告.docx

    《动态规划算法实验》实验报告主要探讨了两个经典动态规划问题——0-1背包问题和合唱队形安排问题。这两个问题都是在优化决策过程中寻找最优解的经典实例。 **一、0-1背包问题** 0-1背包问题是一个经典的约束优化...

Global site tag (gtag.js) - Google Analytics