-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path071. Max Non Negative SubArray.py
75 lines (51 loc) · 1.58 KB
/
071. Max Non Negative SubArray.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
68
69
70
71
72
73
74
75
# Max Non Negative SubArray
"""
Given an array of integers, A of length N, find out the maximum sum sub-array of non negative numbers from A.
The sub-array should be contiguous i.e., a sub-array created by choosing the second and fourth element and skipping the third element is invalid.
Maximum sub-array is defined in terms of the sum of the elements in the sub-array.
Find and return the required subarray.
NOTE:
If there is a tie, then compare with segment's length and return segment which has maximum length.
If there is still a tie, then return the segment with minimum starting index.
Problem Constraints
1 <= N <= 105
-109 <= A[i] <= 109
Input Format
The first and the only argument of input contains an integer array A, of length N.
Output Format
Return an array of integers, that is a subarray of A that satisfies the given conditions.
Example Input
Input 1:
A = [1, 2, 5, -7, 2, 3]
Input 2:
A = [10, -1, 2, 3, -4, 100]
Example Output
Output 1:
[1, 2, 5]
Output 2:
[100]
"""
class Solution:
# @param A : list of integers
# @return a list of integers
def maxset(self, A):
sm = 0
dct = {}
dct[1] = []
i = 1
out = 1
for a in A:
if a >= 0:
dct[i].append(a)
else:
i+=1
dct[i] = []
# print(dct)
for item,value in dct.items():
# print(item,value)
if sum(value)> sm:
sm = sum(value)
out = item
# sm = max(sum(value),sm)
# out = item
return (dct[out])