- 浏览: 183809 次
- 性别:
- 来自: 济南
文章分类
最新评论
动态规划在算法中属于难的问题了,在leetcode中属于中等偏上难度,但是动规是面试容易问到的,因此掌握基本的动规题目很有必要。下面列举leetcode中用DP处理的题目,其中有些用到贪心算法,就不单列出来了,本质上贪心也是动态规划的一个特例。动态规划重要的是能找出递推式,这需要我们多加练习,需要有一个过程。
有关买卖股票的题目有几道,这里列举前两道题。
1,Best Time to Buy and Sell Stock
给定一个整形数组,第i个元素代表第i天股票的价格。如果我们只能做一次交易,也就是只能买卖一次,如何能得到最大的利益。
我们把它抽象一下,就是从一个数组中找到两个元素,使他们的差最大,但是有一个限定,要考虑顺序,因为必须先买了才可以卖。我们设定一个全局的变量max用来保存最大值,用一个变量profit记录每次比较时的利润,然后与max比较,每次都取最大值。时间复杂度为O(n)。
代码如下:
2,Best Time to Buy and Sell Stock II
给定一个整形数组,第i个元素代表第i天股票的价格。如果我们可以做多次交易,也就是我们可以买卖多次,如何能得到最大的利益。
与上面的题目相比,不同的是可以买卖多次,当仅可以买卖一次的时候,我们每次保留一个最大值;既然可以买卖多次,那么只要是profit大于零,我们都要把它算到最后的利润里。所以我们只要在profit大于0的时候,将它加入max中就可以了。代码如下:
3,Triangle
给定一个三角形,找出从top到bottom的最小带权路径,每个元素只能移动到下面与它们相邻的元素。
例如:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
输出:11 (2 + 3 + 5 + 1 = 11)
三角形计算属于动态规划的经典题目,对于这道题,我们可以采用一个滚动数组,从下往上开始计算,每次保留最小的值,这样一直到三角形的顶点,我们就得到一个最小带权路径了。时间复杂度为O(n^2);
代码如下:
有关买卖股票的题目有几道,这里列举前两道题。
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]; } }
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 265Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 267You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 384Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 375Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 500Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 563Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 475Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 664Follow up for N-Queens problem. ... -
N-Queens
2016-03-06 02:47 469The n-queens puzzle is the prob ... -
First Missing Positive
2016-03-05 03:09 430Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 575Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 581Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 426All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 898Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 930Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 602Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 677Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 845Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 783You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 708For a undirected graph with tre ...
相关推荐
数据结构动态规划算法总结 动态规划是一种重要的算法思想,广泛应用于经济管理、生产调度、工程技术和最优控制等方面。动态规划是解决多阶段决策过程的优化问题的数学方法,由美国数学家R.E.Bellman等人在20世纪50...
从给定的文件标题“算法动态规划总结(拓展篇)”和描述“算法动态规划拓展总结,内含详细解说和代码”中,我们可以提炼出一系列关于动态规划算法的知识点,这些知识点涵盖了动态规划的多种应用及其优化技术。...
### 动态规划基础总结 #### 一、概述 动态规划是一种解决最优化问题的方法,其核心思想是将原问题分解成互相重叠的子问题集合,并存储子问题的解来避免重复计算,最终达到求解原问题的目的。本文将对计算机算法中...
动态规划是一种解决问题的有效方法,尤其在处理具有重叠子问题和最优子结构的复杂问题时。在算法分析与设计中,动态规划算法扮演着至关重要的角色。以下是对动态规划算法的详细阐述,以及如何应用于矩阵连乘问题。 ...
本资料主要对动态规划进行了全面的总结,旨在帮助读者深入理解和掌握这一概念。 一、动态规划基础 动态规划的核心是将一个复杂的问题分解为多个相互关联的子问题,然后通过解决这些子问题来求解原问题。它与分治法...
实验者刘春云,专业为软件工程,通过这个实验学习并应用了动态规划这一核心的计算机科学概念。实验指导教师为赵晓平,实验时间为2012年2月21日。 **二项式系数** 二项式系数C(n, k)表示从n个不同元素中选取k个元素...
【动态规划】是一种在计算机科学和数学中广泛使用的算法设计技术,主要应用于解决最优化问题。动态规划通过将复杂问题分解成子问题,并利用子问题的最优解来构造原问题的最优解,从而达到解决问题的目的。它的一个...
### 动态规划总结 #### 1. 按状态类型分类 动态规划问题的核心在于定义合适的状态,根据状态的不同可以将动态规划分为不同的类别。这些分类有助于我们更好地理解和解决问题。 ##### 1.1 编号(长度)动态规划 这...
这个“PKU之DP试题总结”很可能是北京大学(Peking University,简称PKU)提供的一个资源,汇总了该校涉及动态规划的编程题目,帮助学习者深入理解和掌握这一关键算法。 动态规划的核心思想是将复杂问题分解成若干...
动态规划是一种在计算机科学中广泛使用的算法设计策略,特别是在解决最优化问题时。它通过将一个大问题分解成若干小的子问题,并利用...通过不断练习和总结,参赛者能够更好地掌握动态规划的技巧,提高编程竞赛的成绩。
动态规划是一种重要的算法思想,广泛应用于解决复杂优化问题。它通过将大问题分解为相互关联的小问题,并存储每个小问题的解,避免了重复计算,从而达到高效求解的目的。在计算机科学,尤其是算法设计中,动态规划是...
动态规划是一种算法思想,主要用来解决具有重叠子问题和最优子结构特性的问题。在ACM竞赛中,动态规划题目是竞赛的核心部分之一,掌握动态规划是解决算法难题的重要技能。在学习动态规划时,常见的题型包括路径计数...
总结来说,基于LINGO的动态规划法是解决复杂优化问题的有效工具,尤其适合教学和实践场景。通过学习和应用,不仅可以理解动态规划的基本概念,还能掌握使用优化软件解决实际问题的方法,这对于提升学生在交通工程等...
acm动态规划总结 PKU——DP专辑 背包之01 POJ 动态规划总结 背包之01背包、完全背包、多重背包详解 Dynamic+Programming 典型的动态规划,用递归下的记忆化搜索来实现 1088 POJ 动态规划加速原理之四边形不等式 基于...
动态规划是一种用于解决多阶段决策过程中的最优化问题的方法,其核心思想是将复杂问题分解为多个子问题,然后递归地求解这些子问题,从而找到整体最优解。在实际应用中,动态规划广泛应用于资源分配、路径规划、库存...
总结来说,动态规划是一个强大的工具,它能够处理具有重叠子问题和最优子结构的复杂问题。通过对不同状态类型的深入理解和实践,我们可以解决各种各样的问题,从经典的最短路径、最长公共子序列到更复杂的树型结构...
《动态规划算法实验》实验报告主要探讨了两个经典动态规划问题——0-1背包问题和合唱队形安排问题。这两个问题都是在优化决策过程中寻找最优解的经典实例。 **一、0-1背包问题** 0-1背包问题是一个经典的约束优化...