【LeetCode】初级算法:动态规划
1. 爬楼梯
用时:4ms
class Solution { public int climbStairs(int n) { if(n==1) return 1; if(n==2) return 2; int[] num=new int[n]; num[0]=1; num[1]=2; for(int i=2;i<n;++i){ num[i]=num[i-2]+num[i-1]; } return num[n-1]; } }
2. 买卖股票的最佳时机
用时:2ms
class Solution { public int maxProfit(int[] prices) { if(prices==null||prices.length==0) return 0; int max=0,min=prices[0],temp; for(int i=1;i<prices.length;++i){ if(prices[i]<min){ min=prices[i]; }else if((temp=prices[i]-min)>max){ max=temp; } } return max; } }
3. 最大子序和
用时:26ms
class Solution { public int maxSubArray(int[] nums) { int max=nums[0],sum=nums[0]; for(int i=1;i<nums.length;++i){ if(sum<0){ sum=nums[i]; }else{ sum+=nums[i]; } if(sum>max){ max=sum; } } return max; } }
4. 打家劫舍
用时:3ms
class Solution { public int rob(int[] nums) { int len=nums.length; // 返回前两个 if(len==0) return 0; if(len==1) return nums[0]; // 初始化状态 int a=nums[0]; int b=Math.max(nums[0],nums[1]); // 计算状态转移 int max=b,temp; for(int i=2;i<len;++i){ temp=b; b=Math.max(nums[i]+a,b); a=temp; if(b>max) max=b; } return max; } }
下一篇:
寻找jdk中的设计模式之单例模式