https://leetcode.com/problems/maximum-product-subarray/

Just like maximum subarray, we need a maxEndHere and max to keep record the max that end with index i and the max of the whole array. However, since the muiltiplication of two negative number could end up be a big positive number, we need a min to keep record the current lowest number generated.