मान लीजिए हम n लोगों की एक पंक्ति में कुछ कैंडीज वितरित करना चाहते हैं निम्न तरीके से:
- हम पहले व्यक्ति को 1 कैंडी देते हैं, दूसरे व्यक्ति को 2 कैंडीज, और इसी तरह जब तक हम अंतिम व्यक्ति को n कैंडीज नहीं दे देते।
- उसके बाद, हम पंक्ति की शुरुआत में वापस जाते हैं, पहले व्यक्ति को n + 1 कैंडीज देते हैं, दूसरे व्यक्ति को n + 2 कैंडीज, और इसी तरह जब तक हम अंतिम व्यक्ति को 2 * n कैंडीज नहीं दे देते।
हम इस प्रक्रिया को तब तक दोहराएंगे जब तक कैंडीज खत्म नहीं हो जातीं। अंतिम व्यक्ति को हमारी शेष सभी कैंडीज मिलेंगी (जरूरी नहीं कि पिछले उपहार से एक अधिक)।
हमें एक ऐरे लौटाना है जो कैंडीज के अंतिम वितरण को दर्शाता है। इसलिए मान लीजिए कैंडीज 7 हैं, और n = 3, तो आउटपुट [2, 2, 3] होगा। पहले पहले व्यक्ति को 1 मिलेगा। ऐरे [1, 0, 0] है, दूसरे को 2 मिला, फिर ऐरे [1, 2, 0], तीसरे को 3 मिला, फिर ऐरे [1, 2, 3], और अंत में पहले को फिर से 1 मिला, तो ऐरे [2, 2, 3]।
समाधान के चरण
- res n एलिमेंट्स का एक ऐरे है, और 0 से भरा है
- index := 0
- जब तक candies > 0
- res[index mod n] := res[index mod n] + min(candies, index + 1)
- candies := candies - (index + 1)
- index := index + 1
- res लौटाएं
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
class Solution(object):
def distributeCandies(self, candies, num_people):
res = [0 for i in range(num_people)]
index = 0
while candies > 0:
res[index % num_people] += min(candies, index + 1)
candies -= (index + 1)
index += 1
return res
ob1 = Solution()
print(ob1.distributeCandies(8, 3))
इनपुट
8 3
आउटपुट
[3, 2, 3]