一、买卖股票的最佳时机
链接https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
1.暴力法
代码如下(示例):
class Solution {
public int maxProfit(int[] prices) {
if(prices.length<=1){
return 0;
}
int max = 0;
for(int j =0;j<prices.length-1;j++){
for(int i =j+1;i<prices.length;i++){
if(prices[i]-prices[j] > max){
max = prices[i]-prices[j];
}
}
}
return max;
}
}
2.dp
代码如下(示例):
class Solution {
public int maxProfit(int[] prices) {
int max = 0;
int minprice = prices[0];
for(int i = 1;i<prices.length;i++){
if(prices[i]<minprice){
minprice = prices[i];
}else{
if(prices[i]-minprice>max){
max = prices[i] - minprice;
}
}
}
return max;
}
}
二、最大子序和
链接:https://leetcode-cn.com/problems/maximum-subarray/
1.法一
代码如下(示例):
class Solution {
public int maxSubArray(int[] nums) {
int sum = nums[0];
int max = nums[0];
for(int i = 1; i<nums.length; i++){
if(sum<0){
sum = 0;
}
sum = sum + nums[i];
if(sum>max){
max = sum;
}
}
return max;
}
}
2.dp
代码如下(示例):
class Solution {
public int maxSubArray(int[] nums) {
int max = nums[0];
int result = nums[0];
for(int i = 1; i<nums.length; i++){
max = Math.max(max+nums[i],nums[i]);
result = Math.max(max,result);
}
return result;
}
}
感觉法一的思路和动态规划类似的思想~
三、爬楼梯
链接https://leetcode-cn.com/problems/climbing-stairs/
1.dp
代码如下(示例):
class Solution {
public int climbStairs(int n) {
if(n==0){
return 0;
}
if(n==1){
return 1;
}
if(n==2){
return 2;
}
int [] array = new int[n+1];
array[0]=0;
array[1]=1;
array[2]=2;
for(int i =3;i<array.length;i++){
array[i] = array[i-1]+array[i-2];
}
return array[n];
}
}
这道题自己写出来了,哈哈哈。
总结
多刷题,多看思路。