मान लीजिए हमारे पास start और end दो मान हैं, हमें start को end में बदलने के लिए आवश्यक न्यूनतम ऑपरेशन्स की संख्या ढूंढनी है इन ऑपरेशन्स का उपयोग करके:
- 1 से घटाएं
- 2 से गुणा करें
तो, यदि इनपुट start = 2, end = 7 जैसा है, तो आउटपुट 3 होगा, क्योंकि हम 2 को गुणा करके 4 प्राप्त कर सकते हैं, फिर 2 से गुणा करके 8 प्राप्त कर सकते हैं और फिर 1 घटाकर 7 प्राप्त कर सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- ans := 0
- निम्नलिखित को अनंत रूप से करें:
- यदि end <= start, तो ans + start - end लौटाएं
- अन्यथा जब end विषम हो, तो end := end + 1, ans := ans + 1
- अन्यथा, end := end / 2 का भागफल, ans := ans + 1
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
उदाहरण
class Solution:
def solve(self, start, end):
ans = 0
while True:
if end <= start:
return ans + start - end
elif end % 2:
end += 1
ans += 1
else:
end //= 2
ans += 1
ob1 = Solution()
start = 2
end = 7
print(ob1.solve(start, end))
इनपुट
2, 7
आउटपुट
3