本文共 1347 字,大约阅读时间需要 4 分钟。
在求解数组中的第三大数问题时,我们需要定义多个变量来存储前几大的数。例如,第三大的数可以通过以下方式实现:
max1
、max2
和 max3
,其中 max1
是最大值,max2
是第二大值,max3
是第三大值。max1
,则 max3
替换 max2
,max2
替换 max1
,max1
更新为当前数。max2
和 max1
之间,则 max3
替换 max2
,max2
更新为当前数。max2
但大于 max3
,则 max3
更新为当前数。在变体问题中,我们需要考虑数组中既有正数也有负数的情况。这种情况下,我们需要遍历数组,分别找出最大的三个数和最小的两个数(因为负数的绝对值较大的数实际上是更小的数)。最终,最大乘积可能来自以下两种情况:
解决方案如下:
max1
、max2
、max3
来存储前三个最大的数,以及 min1
、min2
来存储最小的两个数。public int maximumProduct(int[] nums) { int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE; int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE; for (int num : nums) { // 处理最大值部分 if (num > max1) { max3 = max2; max2 = max1; max1 = num; } else if (num > max2) { max3 = max2; max2 = num; } else if (num > max3) { max3 = num; } // 处理最小值部分 if (num < min1) { min2 = min1; min1 = num; } else if (num < min2) { min2 = num; } } return Math.max(max1 * max2 * max3, min1 * min2 * max1);}
转载地址:http://lxhhz.baihongyu.com/