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;
}
}