-
Notifications
You must be signed in to change notification settings - Fork 2
/
3.py
67 lines (54 loc) · 2.19 KB
/
3.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 1477. Find Two Non-overlapping Sub-arrays Each With Target Sum
# User Accepted:1141
# User Tried:3252
# Total Accepted:1183
# Total Submissions:9944
# Difficulty:Medium
# Given an array of integers arr and an integer target.
# You have to find two non-overlapping sub-arrays of arr each with sum equal target. There can be multiple answers so you have to find an answer where the sum of the lengths of the two sub-arrays is minimum.
# Return the minimum sum of the lengths of the two required sub-arrays, or return -1 if you cannot find such two sub-arrays.
# Example 1:
# Input: arr = [3,2,2,4,3], target = 3
# Output: 2
# Explanation: Only two sub-arrays have sum = 3 ([3] and [3]). The sum of their lengths is 2.
# Example 2:
# Input: arr = [7,3,4,7], target = 7
# Output: 2
# Explanation: Although we have three non-overlapping sub-arrays of sum = 7 ([7], [3,4] and [7]),
# but we will choose the first and third sub-arrays as the sum of their lengths is 2.
# Example 3:
# Input: arr = [4,3,2,6,2,3,4], target = 6
# Output: -1
# Explanation: We have only one sub-array of sum = 6.
# Example 4:
# Input: arr = [5,5,4,4,5], target = 3
# Output: -1
# Explanation: We cannot find a sub-array of sum = 3.
# Example 5:
# Input: arr = [3,1,1,1,5,1,2,1], target = 3
# Output: 3
# Explanation: Note that sub-arrays [1,2] and [2,1] cannot be an answer because they overlap.
# Constraints:
# 1 <= arr.length <= 10^5
# 1 <= arr[i] <= 1000
# 1 <= target <= 10^8
class Solution:
def minSumOfLengths(self, arr: List[int], target: int) -> int:
# res = []
# loc = 0
# for i in range(len(arr)):
# for j in range(i+1, len(arr)):
# if sum(arr[i:j]) == target:
# res.append(arr[i:j])
# loc = j
# for i in range(loc, len(arr)):
# for j in range(i+1, len(arr)):
# if sum(arr[i:j]) == target:
# res.append(arr[i:j])
# found = False
# if len(res) >=2:
# found = True
# if found:
# return sum(sorted(len(ele)for ele in res)[:2])
# return -1
pass