- K 次取反后最大化的数组和:将数组按照绝对值进行排序从小到大排序,然后从后往前将负数变为正数(这个过程就是优先将绝对值大的负数变为正数),同时k减1。如果负数全部变为正数之后,k还大于0且为奇数,就将最小的数(排序后的第一个数)取反,否则直接求和。
- 加油站:累计[i,j]区间内的油量剩余(i最初从0开始),一旦剩余的油量为负,则下一次的累加位置从j+1开始。在遍历过程中同时要求总的油量剩余,如果总的油量剩余大于等于0,说明从某一个位置开始可以走完一圈,否则说明无论从哪个位置开始都不可能走完一圈。总的来说,根据总油量的剩余情况来判断能不能走完一圈,累计区间内的油量剩余来求起始位置。
- 分发糖果:因为每个孩子要至少有一颗糖果,所以可以先给每个孩子都发一颗糖果。对以每个孩子而言,他要和左右两边的孩子比较(最左边和最右边的除外),因此接下来再分两次分发糖果,第一次,从左到右,如果当前的 孩子比左边的孩子得分高,就多发一个糖果,即根据左边孩子的得分来确定右边孩子的糖果;第二次,从右往左,如果当前孩子比右边孩子的得分高,就给当前孩子多发一个糖果,即根据右边的孩子的得分来确定左边孩子的得分。
- 柠檬水找零 :无非三种情况,第一种,收到5美元,直接收下;第二种,收到10美元,找5美元;第三种,受到20美元,优先找10+5美元,如果没有10美元,再找5+5+5美元。(注意这里要优先使用10美元的,因为找零的时候5美元比10美元更灵活)。因此在这个过程中只需要统计5美元和10美元的数量,而需要关注20美元,一旦发现不能正确找零就返回。
- 根据身高重建队列:先按根据身高的从高到底对数组进行排序,然后再按照ki进行插值。
- 用最少数量的箭引爆气球、无重叠区间、合并区间:这三个题都是区间处理的题目,区间的处理一般都要先对区间进行排序,可以根据左边界,也可以根据右边界,按照个人习惯会根据左边界从小到大进行排序。经过排序之后,判断相邻的两个区间是否重叠就变得很简单了,如果第二个区间的左边界小于等于(包不包括等于根据具体情况判断)第一个区间的右边届,则两个区间有重叠部分。
- 划分字母区间:用数组(哈希思想)来记录每个字符在字符串中最后出现的位置,然后从头开始分割字符串,如果当前子串中的字符不在后面位置出现(这个的判断就用到的刚刚统计的数组),则当前片段就可以进行切割了。
- 单调递增的数字:首先是要获得给定数字的每个位置上的数字,这个可以直接调库。然后从后往前遍历每个数字,如果当前数字比前一个数字小,则将当前数字开始的数字全部变为9,前一个数字减1。
- 斐波那契数、爬楼梯 、 使用最小花费爬楼梯 :这三个题是动态规划中的简单题,一次可以爬一个或者两个楼梯,所以反过来思考就是,要到达某一个位置,可以从前一个或两个台阶走到当前的这个楼梯,这做动态规划的时候一定要明确dp数组及其下标的含义。
- 不同路径 、不同路径 II:上面三个题是一维,这两个题变成了二维。在[i,j]位置处,可以从[i-1,j]或者[i,j-1]位置处走来,如果考虑存在障碍物的情况,就认为走到障碍物存在的地方的路径数为0。存在障碍物的情况在初始化dp数组的时候需要注意,如果第一行或第一列中的某个位置存在障碍物,则后面的dp数组的数组都要初始化为0。
代码随想录训练营第40天|休息日 小结
最新推荐文章于 2024-10-31 16:16:13 发布