मान लीजिए हमारे पास nums नामक एक ऐरे है जिसमें n पूर्णांक हैं जहां n > 1। हमें एक आउटपुट ऐरे ढूंढना है जैसे कि output[i] nums[i] को छोड़कर nums के सभी एलिमेंट्स के उत्पाद के बराबर हो। इसलिए यदि इनपुट ऐरे [1,2,3,4] है, तो आउटपुट [24,12,8,6] होगा। हमें इसे डिवीजन ऑपरेटर का उपयोग किए बिना हल करना है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- right_mul := nums के समान आकार का एक ऐरे, इसे 0 से भरें
- right_mul का अंतिम एलिमेंट = nums का अंतिम एलिमेंट
- i को 1 से nums की लंबाई तक की रेंज में
- right_mul[nums की लंबाई - i - 1] = right_mul[nums की लंबाई - i] * nums[nums की लंबाई - i - 1]
- output := nums के समान आकार का एक ऐरे, इसे 0 से भरें
- prefix := 1, और index := 0
- जब तक index < output की लंबाई - 1
- output[index] := prefix * right_mul[index + 1]
- prefix := prefix * nums[index]
- index := index + 1
- output का अंतिम एलिमेंट := prefix
- output लौटाएं
यह O(n) समय और O(n) स्पेस में प्रीफिक्स और सफ़िक्स उत्पाद का उपयोग करके हल करता है।
बेहतर समझ के लिए निम्न कार्यान्वयन देखें -
उदाहरण
class Solution(object):
def productExceptSelf(self, nums):
right_multiply = [0] * len(nums)
right_multiply[-1] = nums[-1]
for i in range(1, len(nums)):
right_multiply[len(nums) - i - 1] = right_multiply[len(nums) - i] * nums[len(nums) - i - 1]
output = [0] * len(nums)
prefix = 1
current_index = 0
while current_index < len(output) - 1:
output[current_index] = prefix * right_multiply[current_index + 1]
prefix *= nums[current_index]
current_index += 1
output[-1] = prefix
return output
ob1 = Solution()
print(ob1.productExceptSelf([1, 3, 5, 7, 9]))
इनपुट
[1,3,5,7,9]
आउटपुट
[945, 315, 189, 135, 105]