首页 >> 大全

leetcode:2021.12.19周赛 变成递增数列的最少操作次数

2023-09-29 大全 31 作者:考证青年

思路:

想把间隔为k的转化成k个间隔为1的,然后再进行判断

核心函数lis的逻辑不大明晰

递增数列加递减数列_递增数列条件_

初步理解:D[]的构造过程中,比当前都大的话,那显然是不用处理的,所以到最后(就是没有操作);其余的令D【i】变更都是一步操作

再次理解:lis是求最长上升子序列的,这里面估计是一种高级的写法,看不出dp的痕迹

再深入理解:这就是二分+贪心的LIS求法,其中这是不严格的LIS

题目链接:

递增数列条件_递增数列加递减数列_

原题

参见lis方法二:二分+贪心

我的LIS题解

代码:

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

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了