मान लीजिए कि हमारे पास एक और मान सीमा की लंबाई की एक सरणी संख्या है। एक चाल में, हम अंकों से किसी भी मान को 1 और सीमा के बीच के किसी अन्य मान से बदल सकते हैं, जिसमें शामिल हैं। सरणी को पूरक कहा जाता है यदि सभी सूचकांकों के लिए i, nums[i] + nums[n-1-i] समान संख्या के बराबर हो। इसलिए हमें अंकों को पूरक बनाने के लिए आवश्यक चालों की न्यूनतम संख्या ज्ञात करनी होगी।
इसलिए, यदि इनपुट संख्या =[1,4,2,3] सीमा =4 की तरह है, तो आउटपुट 1 होगा क्योंकि एक चाल में हम सूचकांक 1 से 2 पर तत्व बना सकते हैं, इसलिए सरणी [1,2] होगी ,2,3], फिर अंक [0] + अंक [3] =4, अंक [1] + अंक [2] =4, अंक [2] + अंक [1] =4, अंक [3] + अंक [ 0] =4
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- n :=अंकों का आकार
- मध्य :=n/2 का भागफल
- zero_moves :=पूर्णांक प्रकार मान का एक खाली नक्शा
- शुरू करें:=आकार की एक सरणी (2 * सीमा + 1), और 0 से भरें
- अंत:=आकार की एक सरणी (2 * सीमा + 1), और 0 से भरें
- res :=अनंत
- मैं के लिए 0 से मध्य -1 की सीमा में, करो
- x :=nums[i]
- y :=nums[n - 1 - i]
- zero_moves[x + y] :=Zero_moves[x + y] + 1
- प्रारंभ बढ़ाएं[1 + न्यूनतम x, y] 1 तक
- अंत बढ़ाएं[सीमा + अधिकतम x, y] 1 तक
- अंतराल:=0
- सीमा 2 से सीमा*2 तक के लक्ष्य के लिए
- अंतराल:=अंतराल + प्रारंभ[लक्ष्य]
- लागत:=2 *(मध्य-अंतराल) + अंतराल - शून्य_मूव्स[लक्ष्य]
- res :=न्यूनतम रेस और लागत
- अंतराल:=अंतराल - अंत[लक्ष्य]
- रिटर्न रेस
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
from collections import defaultdict def solve(nums, limit): n = len(nums) mid = n // 2 zero_moves = defaultdict(int) start = [0] * (2 * limit + 1) end = [0] * (2 * limit + 1) res = float('inf') for i in range(mid): x = nums[i] y = nums[n - 1 - i] zero_moves[x + y] += 1 start[min(x, y) + 1] += 1 end[max(x, y) + limit] += 1 intervals = 0 for target in range(2, limit * 2 + 1): intervals += start[target] cost = 2 * (mid - intervals) + intervals - zero_moves[target] res = min(res, cost) intervals -= end[target] return res nums = [1,4,2,3] limit = 4 print(solve(nums, limit))
इनपुट
[1,4,2,3], 4
आउटपुट
1