मान लीजिए कि हमारे पास कैंडी नामक संख्याओं की एक सूची है और दो व्यक्ति सबसे अधिक संख्या में कैंडी इकट्ठा करने के लिए दौड़ रहे हैं। यहां दौड़ बारी आधारित है, व्यक्ति 1 पहले शुरू कर रहा है, और प्रत्येक मोड़ में वह आगे या पीछे से कैंडी उठा सकता है। हमें यह जांचना होगा कि व्यक्ति 1 अन्य की तुलना में अधिक कैंडी जमा कर सकता है या नहीं।
इसलिए, यदि इनपुट कैंडीज की तरह है =[1, 4, 3, 8], तो आउटपुट ट्रू होगा, क्योंकि व्यक्ति 1 पहले दौर में 8 कैंडी ले सकता है और इस पर ध्यान दिए बिना कि दूसरा व्यक्ति 1 या 3, व्यक्ति 1 को चुनता है। बची हुई कोई भी कैंडी लेकर जीत सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एन:=कैंडीज का आकार
-
फ़ंक्शन अंतर () को परिभाषित करें। यह बाएँ, दाएँ ले जाएगा
-
यदि बायाँ दाएँ के समान है, तो
-
वापसी कैंडीज[बाएं]
-
-
अधिकतम वापसी (कैंडी [बाएं] - अंतर (बाएं + 1, दाएं)) और (कैंडी [दाएं] - अंतर (बाएं, दाएं - 1))
-
मुख्य विधि से निम्न कार्य करें -
-
अंतर (0, एन -1)> 0, अन्यथा गलत होने पर सही लौटें
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
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