मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची है, संख्याओं के अनुक्रम की चौड़ाई को अनुक्रम में अधिकतम और न्यूनतम संख्या के अंतर के रूप में परिभाषित किया गया है। हमें nums के सभी सबसीक्वेंस की चौड़ाई का योग ज्ञात करना है। यदि उत्तर बहुत बड़ा है तो परिणाम को 10^9+7 से मोड करें।
इसलिए, यदि इनपुट nums = [7, 4, 9] जैसा है, तो आउटपुट 15 होगा, क्योंकि हमारे पास सबसीक्वेंस हैं: [7], [4], [9], [7, 4], [7, 9], [4, 9], [7, 4, 9] और चौड़ाई हैं 0, 0, 0, 3, 2, 5, 5, इसलिए योग 15 है।
हल करने के चरण
m := 10^9 + 7
nums सूची को सॉर्ट करें
ans := 0
power := nums + 1 के आकार की सूची और 1 से भरें
i के लिए 1 से nums के आकार + 1 तक की रेंज में, करें power[i] := power[i - 1] * 2 mod m
i के लिए 0 से nums के आकार तक की रेंज में, करें
positive := (power[i] - 1) * nums[i]
negative := (power[nums का आकार - i - 1] - 1) * nums[i]
ans := (ans + positive - negative) mod m
ans लौटाएं
उदाहरण
class Solution:
def solve(self, nums):
m = 10**9 + 7
nums.sort()
ans = 0
power = [1] * (len(nums) + 1)
for i in range(1, len(nums) + 1):
power[i] = power[i - 1] * 2 % m
for i in range(0, len(nums)):
positive = (power[i] - 1) * nums[i]
negative = (power[len(nums) - i - 1] - 1) * nums[i]
ans = (ans + positive - negative) % m
return ans
ob = Solution()
nums = [7, 4, 9]
print(ob.solve(nums))
इनपुट
[7, 4, 9]
आउटपुट
15