122. 买卖股票的最佳时机Ⅱ
题目:122. 买卖股票的最佳时机 II - 力扣(LeetCode)
题解:代码随想录 (programmercarl.com)
拆成每一天,只要股票涨了,就算我们赚的
solution
public class Solution {
public int MaxProfit(int[] prices) {
int sum = 0;
for(int i = 1; i < prices.Length; i++)
{
if(prices[i] > prices[i - 1]) sum += prices[i] - prices[i - 1];
}
return sum;
}
}
summary
本来要算最高峰值和最低峰值的差值和,注意学会拆分
55. 跳跃游戏
题目:55. 跳跃游戏 - 力扣(LeetCode)
题解:代码随想录 (programmercarl.com)
思路比较清晰,不断更新覆盖范围
solution
public class Solution {
public bool CanJump(int[] nums) {
int cover = 0;
for(int i = 0; i <= cover; i ++)
{
cover = cover > nums[i] + i ? cover : nums[i] + i;
if(cover >= nums.Length - 1) return true;
}
return false;
}
}
summary
错误:
能跳完的条件判定:cover >= nums.Length - 1
45. 跳跃游戏Ⅱ
solution
public class Solution {
public int Jump(int[] nums) {
int result = 0;
int cover = 0;
int nextcover = 0;
while(cover < nums.Length - 1)
{
for(int i = 0; i <= cover; i ++)
{
nextcover = nextcover > nums[i] + i ? nextcover : nums[i] + i;
}
result ++;
cover = nextcover;
}
return result;
}
}
summary
贪得是每一步尽可能走的远。。。
1005. K次取反后最大化的数组和
题目:1005. K 次取反后最大化的数组和 - 力扣(LeetCode)
题解:代码随想录 (programmercarl.com)
每次都选最小的数取反
solution
public class Solution {
public int LargestSumAfterKNegations(int[] nums, int k) {
int result = 0;
Array.Sort(nums);
for(int i = 1; i <= k; i ++)
{
if(nums[0] < 0)
{
nums[0] = -nums[0];
Array.Sort(nums);
}
else if(nums[0] == 0)
{
break;
}
else
{
nums[0] = (k - i + 1) % 2 == 0 ? nums[0]:-nums[0];
break;
}
}
foreach(int j in nums)
{
result += j;
}
return result;
}
}
summary
可以直接重复排序+取反的过程
也可以加入条件判断优化