给定一个double类型的数组arr,其中的元素可正、可负、可0,返回子数组累乘的最大乘积。例如,arr=[-2.5, 4, 0, 3, 0.5, 8, -1],子数组[3, 0.5, 8]累乘可以获得最大的乘积12,所以返回12
[要求]
时间复杂度为,空间复杂度为
第一行一个整数N。表示数组长度。
接下来一行N个浮点数表示数组内的数
输出一个浮点数表示答案,保留到小数点后两位
7 -2.5 4 0 3 0.5 8 -1
12.00
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); String[] strArr = br.readLine().split(" "); double[] nums = new double[n]; for(int i = 0; i < n; i++) nums[i] = Double.parseDouble(strArr[i]); double dmax = 1.0, dmin = 1.0; double max = Double.MIN_VALUE; for(int i = 0; i < n; i++){ if(nums[i] < 0){ // 遇到负数时,需要交换一下到目前为止的最大累乘值和最小累乘值,因为会使得最大的变最小,最小的变最大 double temp = dmax; dmax = dmin; dmin = temp; } dmax = Math.max(dmax * nums[i], nums[i]); dmin = Math.min(dmin * nums[i], nums[i]); max = Math.max(max, dmax); } System.out.println(String.format("%.2f", max)); } }