Leetcode: 2366. Minimum Replacements to Sort the Array

Problem Statement

from typing import List


class Solution:
    def minimumReplacement(self, nums: List[int]) -> int:
        N = len(nums)
        ans = 0
        cur = nums[-1]

        for i in range(N - 2, -1, -1):
            if nums[i] <= cur:
                cur = nums[i]
            elif cur == 1:
                ans += nums[i] - 1
            else:
                j = (nums[i] + cur - 1) // cur
                ans += j - 1
                cur = nums[i] // j
        return ans


assert Solution().minimumReplacement([3, 9, 3]) == 2
assert Solution().minimumReplacement([1, 2, 3, 4, 5]) == 0