मान लीजिए हमारे पास candies नामक संख्याओं की एक सूची है और दो व्यक्ति सबसे अधिक कैंडीज इकट्ठा करने की दौड़ में हैं। यहां दौड़ टर्न-आधारित है, व्यक्ति 1 पहले शुरू करता है, और प्रत्येक टर्न में वह सामने से या पीछे से कैंडीज ले सकता है। हमें जांचना है कि क्या व्यक्ति 1 दूसरे से अधिक कैंडीज इकट्ठा कर सकता है या नहीं।
इसलिए, यदि इनपुट candies = [1, 4, 3, 8] जैसा है, तो आउटपुट True होगा, क्योंकि व्यक्ति 1 पहले राउंड में 8 कैंडीज ले सकता है और चाहे दूसरा व्यक्ति 1 या 3 ले, व्यक्ति 1 शेष कैंडी लेकर जीत सकता है।
हल करने के चरण
N := candies का आकार
difference() फ़ंक्शन परिभाषित करें। यह left, right लेगा
यदि left, right के समान है, तो candies[left] लौटाएं
(candies[left] - difference(left + 1, right)) और (candies[right] - difference(left, right - 1)) का अधिकतम लौटाएं
मुख्य विधि से निम्नलिखित करें:
यदि difference(0, N - 1) > 0 तो true लौटाएं, अन्यथा false
उदाहरण
class Solution:
def solve(self, candies):
N = len(candies)
def difference(left, right):
nonlocal candies
if left == right:
return candies[left]
return max(candies[left] - difference(left + 1, right), candies[right] - difference(left, right - 1))
return difference(0, N - 1) > 0
ob = Solution()
candies = [1, 4, 3, 8]
print(ob.solve(candies))
इनपुट
[1, 4, 3, 8]
आउटपुट
True