Program to find length of longest sublist with given condition in Python

PythonServer Side ProgrammingProgramming

Suppose we have a list of numbers called nums, we have to find the length of the longest sublist where 2 * minimum of sublist > maximum of sublist.

So, if the input is like nums = [10, 2, 6, 6, 4, 4], then the output will be 4, as the sublist [6, 6, 4,4] is the longest sublist that holds the criteria as 2 * 4 > 6.

To solve this, we will follow these steps−

• ret := 0

• define two double ended queues minq and maxq

• l := 0, r := 0

• while r < size of nums, do

• n := nums[r]

• while minq and n < nums[last element of minq], do

• delete last element from minq

• insert r at the end of minq

• while maxq and n > nums[last element of maxq], do

• delete last element from maxq

• insert r at the end of maxq

• r := r + 1

• while l < r and nums[minq[0]] * 2 <= nums[maxq[0]], do

• if minq[0] is same as l, then

• delete first element of minq

• if maxq[0] is same as l, then

• delete first element of maxq

• l := l + 1

• ret := maximum of ret and (r - l)

• return ret

Let us see the following implementation to get better understanding −

Example

Live Demo

class Solution:
def solve(self, nums):
from collections import deque
ret = 0
minq, maxq = deque(), deque()
l, r = 0, 0
while r < len(nums):
n = nums[r]
while minq and n < nums[minq[-1]]:
minq.pop()
minq.append(r)
while maxq and n > nums[maxq[-1]]:
maxq.pop()
maxq.append(r)
r += 1
while l < r and nums[minq[0]] * 2 <= nums[maxq[0]]:
if minq[0] == l:
minq.popleft()
if maxq[0] == l:
maxq.popleft()
l += 1
ret = max(ret, r - l)
return ret
ob = Solution()
nums = [10, 2, 6, 6, 4, 4]
print(ob.solve(nums))

Input

[10, 2, 6, 6, 4, 4]

Output

4
Published on 10-Oct-2020 13:49:55