Python删除KLength子列表后求最小振幅的程序
假设我们有一个名为nums的数字列表和一个值k。首先,我们将删除大小为k的子列表,然后找到(nums的最大值-nums的最小值)的最小值。
所以,如果输入像nums=[2,3,10,9,8,4]k=3,那么输出将是2,如果我们去掉[10,9,8]我们得到[2,3,4]和4-2=2
示例
让我们看下面的实现来更好地理解
def solve(nums, k): N = len(nums) lmin, lmax = nums[:], nums[:] rmin, rmax = nums[:], nums[:] for i in range(1, N): lmin[i] = min(lmin[i], lmin[i - 1]) lmax[i] = max(lmax[i], lmax[i - 1]) for i in range(N - 2, -1, -1): rmin[i] = min(rmin[i], rmin[i + 1]) rmax[i] = max(rmax[i], rmax[i + 1]) ans = min(rmax[k] - rmin[k], lmax[~k] - lmin[~k]) for i in range(N - k - 1): cand = max(lmax[i], rmax[i + k + 1]) - min(lmin[i], rmin[i + k + 1]) ans = min(ans, cand) return ans nums = [2, 3, 10, 9, 8, 4] k = 3 print(solve(nums, k))
输入
[2, 3, 10, 9, 8, 4], 3输出结果
2