思路:
想把间隔为k的转化成k个间隔为1的 , 然后再进行判断
核心函数lis的逻辑不大明晰
文章插图
初步理解:D[]的构造过程中 , 比当前都大的话 , 那显然是不用处理的 , 所以到最后(就是没有操作);其余的令D【i】变更都是一步操作
再次理解:lis是求最长上升子序列的 , 这里面估计是一种高级的写法 , 看不出dp的痕迹
再深入理解:这就是二分+贪心的LIS求法 , 其中这是不严格的LIS
题目链接:
文章插图
原题
参见lis方法二:二分+贪心
我的LIS题解
代码:
【leetcode:2021.12.19周赛 变成递增数列的最少操作次数】
class Solution:def kIncreasing(self, arr: List[int], k: int) -> int:def lis(A):D = []for a in A:i = bisect_right(D, a)if i == len(D):D.append(a)else:D[i] = areturn len(D)ans = 0for i in range(k):# 从头开始 , 按间隔取出对应的子数列A = arr[i::k]ans += len(A) - lis(A)return ans
- 200道大数据面试常考Leetcode算法题
- 苹果手机键盘拼音变成数字怎么办
- 袁崇焕:一代忠臣怎会变成引狼入室的汉?
- 网友投稿将自家猫咪变成贴图,从第一张开始就让人笑到停不下 世界之最贴图
- 中国首富变成中国首富,中国首富的十大首富
- 慈禧如何从一个不小小女子变成太后#039;老佛爷的?
- 带牙套会变成嫩牛五方牙套脸?拒绝变丑教你变美 牙膏脸世界之最网盘资源
- 为什么短短几年,中国的癌症变成了世界之最?或许和这点有关 中国之最相关图片
- 解密:隋朝佞臣裴矩为何会在唐shy;朝变成了能臣良臣?
- 为什么短短几年,中国的癌症变成了世界之最?或许和这点有关 世界之最览