मान लीजिए कि हमारे पास nums नामक एक सरणी है और दूसरा मान k है। हमें संख्याओं के गैर-रिक्त अनुक्रमों की संख्या इस प्रकार ज्ञात करनी है कि उस पर न्यूनतम और अधिकतम तत्व का योग छोटा या k के बराबर हो। उत्तर बहुत बड़े हो सकते हैं इसलिए वापसी उत्तर मोड 10^9 + 7.
इसलिए, यदि इनपुट nums =[4,6,7,8] k =11 जैसा है, तो आउटपुट 4 होगा क्योंकि इसके बाद के क्रम हैं जैसे
-
[4], यहां न्यूनतम 4 है, अधिकतम 4 है, इसलिए 4+4 <=11
-
[4,6], यहां न्यूनतम 4 है, अधिकतम 6 है, इसलिए 4+6 <=11
-
[4,6,7], यहां न्यूनतम 4 है, अधिकतम 7 है, इसलिए 4+7 <=11
-
[4,7], यहां न्यूनतम 4 है, अधिकतम 7 है, इसलिए 4+7 <=11
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
सूची संख्या क्रमित करें
-
मी :=10^9 + 7
-
बायां :=0
-
दाएं:=अंकों का आकार - 1
-
रेस :=0
-
जबकि बाएं <=दाएं, करें
-
यदि अंक [बाएं] + अंक [दाएं]> k, तो
-
दाएँ :=दाएँ - 1
-
-
अन्यथा,
-
num_inside :=दाएँ-बाएँ
-
रेस :=(res + (2^num_inside) मॉड एम) मॉड एम
-
बाएँ :=बाएँ + 1
-
-
-
रिटर्न रेस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
def solve(nums, k): nums.sort() m = 10**9 + 7 left = 0 right = len(nums) - 1 res = 0 while(left <= right): if nums[left] + nums[right] > k: right -= 1 else: num_inside = right - left res = (res + pow(2, num_inside, m)) % m left += 1 return res nums = [4,6,7,8] k = 11 print(solve(nums, k))
इनपुट
[4,6,7,8], 11
आउटपुट
4