मान लीजिए हमारे पास दो संख्याएं a और b हैं, हमें [1, a] रेंज में वैल्यूज़ वाली एक ऐरे ढूंढनी है जिसमें रिकर्सिव मर्ज सॉर्ट फंक्शन के ठीक b कॉल्स की आवश्यकता होती है।
तो, यदि इनपुट a = 10, b = 15 जैसा है, तो आउटपुट [3, 1, 4, 6, 2, 8, 5, 9, 10, 7] होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- solve() फंक्शन डिफाइन करें। यह left, right, array, b लेगा
- यदि b < 1 या left + 1, right के समान है, तो
- वापस लौटें
- b := b - 2
- mid := (left + right) // 2
- temp := array[mid - 1]
- array[mid-1] := array[mid]
- array[mid] := temp
- solve(left, mid, array, b)
- solve(mid, right, array, b)
- मेन मेथड से निम्नलिखित करें:
- यदि b % 2 == 0, तो
- "None" प्रदर्शित करें
- वापस लौटें
- array := आकार n + 1 की ऐरे, 0 से भरी
- array[0] := 1
- i को 1 से a तक रेंज में, करें
- array[i] := i + 1
- b := b - 1
- solve(0, a, array, b)
- array, a लौटाएं
उदाहरण
बेहतर समझ के लिए निम्नलिखित इम्प्लीमेंटेशन देखें:
def solve(left, right, array, b): if b < 1 or left + 1 == right: return b -= 2 mid = (left + right) // 2 temp = array[mid - 1] array[mid - 1] = array[mid] array[mid] = temp solve(left, mid, array, b) solve(mid, right, array, b) def find_arr(a, b): if b % 2 == 0: print("None") return array = [0] * (a + 2) array[0] = 1 for i in range(1, a): array[i] = i + 1 b -= 1 solve(0, a, array, b) return array, a a = 10 b = 15 array, size = find_arr(a, b) print(array[:size])इनपुट
10, 15
आउटपुट
[3, 1, 4, 6, 2, 8, 5, 9, 10, 7]
- यदि b % 2 == 0, तो