LeetCode122.买卖股票的最佳时机II
public int maxProfit(int[] prices) {
int buy=-1;
int sub=0,max=0;
for(int i=0;i<prices.length-1;i++) {
if(prices[i]>prices[i+1]) {
//第二次遇到山峰,记录前一次的值
if(buy!=-1) {
max=max+sub;
buy=-1;
sub=0;
}
buy=prices[i+1];
}else if(prices[i]<=prices[i+1]) {
if(buy!=-1) {
sub=prices[i+1]-buy;
}
if(i==0) {
buy=prices[i];
sub=prices[i+1]-buy;
}
}
}
if(sub!=0) {
max=max+sub;
}
return max;
}
LeetCode55. 跳跃游戏
public boolean canJump(int[] nums) {
int maxReach = 0; // 当前能到达的最远位置
for (int i = 0; i < nums.length; i++) {
if (i > maxReach) {
return false; // 如果当前位置超过了当前能到达的最远位置,则不能到达最后一个位置
}
maxReach = Math.max(maxReach, i + nums[i]); // 更新能到达的最远位置
if (maxReach >= nums.length - 1) {
return true; // 如果能到达或超过最后一个位置,返回true
}
}
return false; // 如果遍历完数组都没有到达最后一个位置,返回false
}
LeetCode45.跳跃游戏II
public int jump(int[] nums) {
int end = 0;
int maxPosition = 0;
int steps = 0;
for (int i = 0; i < nums.length - 1; i++) {
maxPosition = Math.max(maxPosition, i + nums[i]);
if (i == end) {
end = maxPosition;
steps++;
}
}
return steps;
}
LeetCode1005.K次取反后最大化的数组和
public int largestSumAfterKNegations(int[] nums, int k) {
//清除负数
Arrays.sort(nums);
int i=0;
while(i<nums.length&&k>0) {
if(nums[i]<0) {
nums[i]=-nums[i];
i++;
k--;
}else{
break;
}
}
//如果k不为0则继续翻转
Arrays.sort(nums);
while(k>0) {
nums[0]=-nums[0];
k--;
}
int sum=0;
for(int q=0;i<nums.length;i++) {
sum+=nums[q];
}
return sum;
}