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