12月28日
188.买卖股票的最佳时机Ⅳ
class Solution {
public int maxProfit(int k, int[] prices) {
if(prices.length == 0 || k < 1) {
return 0;
}
if(k >= prices.length/2) {
return ans1(prices);
}
int[][] t = new int[k][2];
for(int i = 0; i < k; i ++) {
t[i][0] = Integer.MIN_VALUE;
}
// t[i][0] 有股票,t[i][-1] 没股票
for(int p : prices) {
t[0][0] = Math.max(t[0][0], p * -1);
t[0][1] = Math.max(t[0][1], t[0][0] + p);
for(int i = 1; i < k; i ++) {
t[i][0] = Math.max(t[i][0], t[i-1][1] - p);
t[i][1] = Math.max(t[i][1], t[i][0] + p);
}
}
return t[k-1][1];
}
private int ans1(int[] prices) {
int res = 0;
for(int i = 1; i < prices.length; i ++) {
if(prices[i] > prices[i-1]) {
res += prices[i] - prices[i-1];
}
}
return res;
}
}
1.4
509.斐波那契数
class Solution {
public int fib(int n) {
if(n < 2) {
return n;
}
int n1 = 0, n2 = 1, t = 0;
while(n > 1) {
t = n1 + n2;
n1 = n2;
n2 = t;
n --;
}
return n2;
}
}