快过年了,终于把能做的都做了。
1567. 乘积为正数的最长子数组长度
# @param {Integer[]} nums
# @return {Integer}
def get_max_len(nums)
h = {}
nums.each_with_index do |n,i|
if n == 0
h[i] = 0
end
end
m = h.keys
if m.length > 0
m.push(nums.length)
else
t = []
for i in 0...nums.length
if nums[i] < 0
t.push(i)
end
end
if t.length%2 == 1
return [nums.length - t[0] - 1,t[-1]].max
else
return nums.length
end
end
i = 0
len = -1.0/0.0
while i < m.length - 1
if i == 0 && m[i] > 0
len = [len,cal(0,m[i],nums)].max
end
len = [len,cal(m[i],m[i+1],nums)].max
i += 1
end
len
end
def cal(x,y,nums)
t = []
if x == 0
x1 = x
else
x1 = x+1
end
for i in x1...y
if nums[i] < 0
t.push(i)
end
end
if t.length%2 == 0
if x == 0 && nums[x] != 0
return y
else
return y - x - 1
end
else
if t.length > 1
l1 = y - t[0] - 1
if x == 0 && nums[x] != 0
l2 = t[-1]
else
l2 = t[-1] - x - 1
end
return [l1,l2].max
else
l1 = y - t[0] - 1
if x == 0
l2 = t[0]
else
l2 = t[0] - x - 1
end
return [l1,l2].max
end
end
end