LC 6144. 将数组排序的最少替换次数

https://leetcode.cn/contest/biweekly-contest-84/problems/minimum-replacements-to-sort-the-array/

这个问题,我最开始思路是正确的,使用贪心算法(虽然我也没有办法证明)。但是实现拆分的时候实现错误了,接着就把问题复杂化做了许多尝试,最后重新绕回来。


贪心算法就是,从后往前考虑,假设相邻元素是 [x, y]

我最开始实现方法是,假设 t=x//y,

之前没有接触过类似问题,所以就使用这个“简单并且朴素”的算法来处理。但是结果其实不对,

所以正确的思路还是进行均分尝试:可能不需要while, 循环1-2次就好了。

def fix(x, y):
    t = x // y
    while True:
        z = x // t
        rem = x % t
        z2 = z
        if rem:
            z2 += 1
        if z2 <= y:
            return z, t - 1
        t += 1

之前复杂化的思路是下面这样的

但是有个比较恶心的情况,比如 [ …. 3, 5, .. 4]