代码随想录算法训练营第三十四天| 贪心算法 part03

1005. K 次取反后最大化的数组和

给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:

  • 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。

重复这个过程恰好 k 次。可以多次选择同一个下标 i 。

以这种方式修改数组后,返回数组 可能的最大和 。

这道题我没有使用贪心算法,而是想试着分析不同的情况:

1 给列表排序,如果元素都是负数或者是0,那么就一直使用k的次数不断取反

2 如果遇到正数了,说明负数已经用完了。如果此时k还没有用完,此时再次给列表排序,选择列表中第一个数也就是最小的正数不断取反,直到k用完。

代码随想录算法训练营第三十四天| 贪心算法 part03_第1张图片

再去学习一下怎么贪心:

贪心算法,这不就是常识?还能叫贪心?LeetCode:1005.K次取反后最大化的数组和_哔哩哔哩_bilibili 然后发现贪心的思路也是一样的先将所有负数取反,然后找非负整数消耗即可:

代码随想录算法训练营第三十四天| 贪心算法 part03_第2张图片

 

134. 加油站

在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。

你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。

给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。

代码随想录算法训练营第三十四天| 贪心算法 part03_第3张图片

贪心算法,得这么加油才能跑完全程!LeetCode :134.加油站_哔哩哔哩_bilibili 

 

 

135. 分发糖果

n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。

你需要按照以下要求,给这些孩子分发糖果:

  • 每个孩子至少分配到 1 个糖果。
  • 相邻两个孩子评分更高的孩子会获得更多的糖果。

请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

贪心算法,两者兼顾很容易顾此失彼!LeetCode:135.分发糖果_哔哩哔哩_bilibili

代码随想录算法训练营第三十四天| 贪心算法 part03_第4张图片 

 

你可能感兴趣的:(算法,贪心算法)