मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची और एक अन्य मान pos है। हमें nums की एक सबलिस्ट A ज्ञात करनी है जिसमें इंडेक्स pos शामिल हो ताकि (A का न्यूनतम) * (A का आकार) अधिकतम हो, फिर मान लौटाएं।
इसलिए, यदि इनपुट nums = [-2, 2, 5, 4] pos = 3 जैसा है, तो आउटपुट 8 होगा, क्योंकि सबसे अच्छी सबलिस्ट [5, 4] है, क्योंकि min(5, 4) = 4 और इसका आकार 2 है तो 4 * 2 = 8।
हल करने के चरण
ans := A[pos], m := A[pos]
i := pos, j := pos
i के लिए 0 से A के आकार - 1 तक की रेंज में निम्नलिखित करें
left := A[i - 1] यदि i - 1 >= 0 अन्यथा -inf
right := A[j + 1] यदि j + 1 < A का आकार अन्यथा -inf
यदि left >= right, तो i := i - 1, m := m और A[i] का न्यूनतम
अन्यथा, j := j + 1, m := m और A[j] का न्यूनतम
ans := ans और m * (j - i + 1) का अधिकतम
ans लौटाएं
उदाहरण
class Solution:
def solve(self, A, pos):
NINF = float("-inf")
ans = m = A[pos]
i = pos
j = pos
for _ in range(len(A) - 1):
left = A[i - 1] if i - 1 >= 0 else NINF
right = A[j + 1] if j + 1 < len(A) else NINF
if left >= right:
i -= 1
m = min(m, A[i])
else:
j += 1
m = min(m, A[j])
ans = max(ans, m * (j - i + 1))
return ans
ob = Solution()
nums = [-2, 2, 5, 4]
pos = 3
print(ob.solve(nums, pos))
इनपुट
[-2, 2, 5, 4], 3
आउटपुट
8