1public int maxProduct(int[] nums) {
2 // Initialize result and products
3 int result = nums[0];
4 int maxProduct = nums[0];
5 int minProduct = nums[0];
6
7 for (int i = 1; i < nums.length; i++) {
8 // Store current max before updating
9 int tempMax = maxProduct;
10
11 // Calculate three candidates
12 maxProduct = Math.max(nums[i], Math.max(maxProduct * nums[i], minProduct * nums[i]));
13 minProduct = Math.min(nums[i], Math.min(tempMax * nums[i], minProduct * nums[i]));
14
15 // Update global result
16 result = Math.max(result, maxProduct);
17 }
18
19 return result;
20}