1 买卖股票的最佳时机II
题目
给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
代码
class Solution {
public int maxProfit(int[] prices) {
if(prices.length<=1) return 0;
int cur=0,pre=0;
int in=-1,out=0;
int result=0;
boolean buy=false;
for(int i=0;i<prices.length-1;i++){
cur=prices[i+1]-prices[i];
if(pre<=0 && cur>0){
in=i;
buy=true;
}
if(pre>=0 && cur<=0){
out=i;
if(in!=-1 && buy){
buy=false;
result+=(prices[out]-prices[in]);
}
}
pre=cur;
}
if(buy) result+=prices[prices.length-1]-prices[in];
return result;
}
}
//讲解代码
class Solution {
public int maxProfit(int[] prices) {
int res=0;
for(int i=1;i<prices.length;i++){
res+=Math.max(prices[i]-prices[i-1],0);
}
return res;
}
}
总结
我先自己想了想,写出了代码。然后我去看了看讲解,我似乎抓到了解题的关键,但似乎又被我弄的很复杂。我参考之前一道题写的这个,在极小值买入,在极大值卖出,似乎和讲解又有点不一样o(╥﹏╥)o
2 跳跃游戏
题目
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。
代码
class Solution {
public boolean canJump(int[] nums) {
int cover=0;
if(nums.length==1) return true;
for(int i=0;i<=cover;i++){
cover=Math.max(cover,i+nums[i]);
if(cover>=nums.length-1)
return true;
}
return false;
}
}
总结
自己最开始没想明白怎么写。
看了讲解后,啊啊啊啊,我是在做贪心算法啊,就没想到哎。
3 跳跃游戏II
题目
给你一个非负整数数组 nums ,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
假设你总是可以到达数组的最后一个位置。
代码
class Solution {
public int jump(int[] nums) {
if(nums.length==1) return 0;
int count=1;
int precover=nums[0],curcover=0;
for(int i=1;i<nums.length;){
if(precover>=nums.length-1)
break;
while(i<=precover){
curcover=Math.max(curcover,i+nums[i]);
i++;
}
count++;
precover=curcover;
}
return count;
}
}
//讲解代码
class Solution {
public int jump(int[] nums) {
if(nums.length==1) return 0;
int count=0;
int curcover=0,maxcover=0;
for(int i=0;i<nums.length;i++){
maxcover=Math.max(maxcover,i+nums[i]);
if(maxcover>=nums.length-1){
count++;
break;
}
if(i==curcover){
curcover=maxcover;
count++;
}
}
return count;
}
}
总结
我按照自己的想法,不断改错,终于写出来了。可是看着改完的代码,我开始看不懂了。我的想法就是在这一个覆盖范围内,选出最大的新的覆盖范围,然后count++,并不是让每一步更新cover都加一。但是好多测试用例的错误,删删改改,最后代码这个样子。和讲解代码一个想法,代码多学学怎么写的逻辑清楚。