1526. 形成目标数组的子数组最少增加次数;2008. 出租车的最大盈利;1589. 所有排列中的最大和

1526. 形成目标数组的子数组最少增加次数

核心思想:差分数组。对于一个数组a,要想从全为0的数组增加1变为它,等价于从a减少1变为全0的数组。然后a有一个差分数组d,对于a区间的[L,R]减少1操作等价于对d[L]-1,然后d[R+1]+1。你想让a变为全0,即让d也变为全0,每次操作相当于让d的前面一个数-1,后面一个数+1。由于d的所有前缀和是大于等于1的,因为前缀和代表的是a中的一个数。所以我们需要的最少操作次数就为让d中的正数全为0的次数,即正数和。因为你对正数减少一你可以让后面的负数加一,又因为前缀和大于等于0的,所以让正数全为0后,你的负数肯定也全为0了,具体证明可以看官方题解。

1526. 形成目标数组的子数组最少增加次数;2008. 出租车的最大盈利;1589. 所有排列中的最大和_第1张图片

2008. 出租车的最大盈利

核心思想:动态规划。这题感觉只要你把f[i]的定义写好就行了,具体看代码注释。

1526. 形成目标数组的子数组最少增加次数;2008. 出租车的最大盈利;1589. 所有排列中的最大和_第2张图片

1589. 所有排列中的最大和

核心思想:用差分数组统计出下标个数,然后下标个数最大的对应nums的最大值即可。

1526. 形成目标数组的子数组最少增加次数;2008. 出租车的最大盈利;1589. 所有排列中的最大和_第3张图片

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