मान लीजिए हमारे पास nums नामक संख्याओं की सूची और एक मान k है। पहले हम आकार k की एक सबलिस्ट हटाएंगे, फिर (nums का अधिकतम - nums का न्यूनतम) का न्यूनतम ढूंढें।
तो, यदि इनपुट nums = [2, 3, 10, 9, 8, 4] k = 3 है, तो आउटपुट 2 होगा, यदि हम [10, 9, 8] हटाते हैं तो हमें [2, 3, 4] मिलता है और 4 - 2 = 2।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
N := nums का आकार
nums को lmin और lmax में कॉपी करें
nums को rmin और rmax में भी कॉपी करें
i के लिए 1 से N - 1 तक की रेंज में, करें
lmin[i] := lmin[i] और lmin[i - 1] का न्यूनतम
lmax[i] := lmax[i] और lmax[i - 1] का अधिकतम
i के लिए N - 2 से 0 तक, 1 से घटाते हुए, करें
rmin[i] := rmin[i] और rmin[i + 1] का न्यूनतम
rmax[i] := rmax[i] और rmax[i + 1] का अधिकतम
ans := (rmax[k] - rmin[k]), (lmax[~k] - lmin[~k]) का न्यूनतम
i के लिए 0 से N - k - 2 तक की रेंज में, करें
cand := (lmax[i] और rmax[i + k + 1] का अधिकतम) - (lmin[i] और rmin[i + k + 1] का न्यूनतम)
ans := ans और cand का न्यूनतम
ans लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें
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