- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Program to find the sum of the lengths of two nonoverlapping sublists whose sum is given in Python
Suppose we have a list of numbers called nums and another value k, we have to find two nonoverlapping sublists in nums whose sum is k, and we have to find the sum of their lengths. When there are more than two possible sublists, we have to find the sum of the lengths of the two smallest sublists. If we cannot find the answer, return −1.
So, if the input is like nums = [7, 10, −2, −1, 4, 3] k = 7, then the output will be 3, as we pick the sublists like [7] and [4, 3]. We did not pick [10, −2, −1] as this is longer.
To solve this, we will follow these steps −
N := size of A
prefix := of size N, and fill with infinity
last := a map with value −1 for key 0 {0: −1}
s := 0
for i in range 0 to N, do
s := s + A[i]
prefix[i] := i − last[s − target], if not found set −infinity
last[s] := i
for i in range 1 to N, do
prefix[i] := minimum of prefix[i], prefix[i − 1]
suffix := of size N, and fill with infinity
last := a map with value N for key 0 {0: N}
s := 0
for i in range N − 1 to −1, decrease by 1, do
s := s + A[i]
suffix[i] := last[s − target] (if not found set infinity) − i
last[s] := i
for i in range N − 2 to −1, decrease by 1, do
suffix[i] := minimum of suffix[i] and suffix[i + 1]
ans := minimum of prefix[i] + suffix[i + 1] for each i in range 0 to N − 1
return ans if ans < infinity otherwise −1
Let us see the following implementation to get better understanding −
Example
class Solution: def solve(self, A, target): INF = float("inf") N = len(A) prefix = [INF] * N last = {0: −1} s = 0 for i in range(N): s += A[i] prefix[i] = i − last.get(s − target, −INF) last[s] = i for i in range(1, N): prefix[i] = min(prefix[i], prefix[i − 1]) suffix = [INF] * N last = {0: N} s = 0 for i in range(N − 1, −1, −1): s += A[i] suffix[i] = last.get(s − target, INF) − i last[s] = i for i in range(N − 2, −1, −1): suffix[i] = min(suffix[i], suffix[i + 1]) ans = min(prefix[i] + suffix[i + 1] for i in range(N − 1)) return ans if ans < INF else −1 ob = Solution() nums = [7, 10, −2, −1, 4, 3] k = 7 print(ob.solve(nums, k))
Input
[7, 10, −2, −1, 4, 3], 7
Output
3