628.三个数的最大乘积

104 阅读1分钟

题目:
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
算法:
结果是 【最小两个负数*最大正数】和【三个最大正数的最大值】 方法一:排序

import "sort"

func maximumProduct(nums []int) int {
	sort.Ints(nums)
	if len(nums) == 3 {
		return nums[0] * nums[1] * nums[2]
	}
	max1 := nums[0] * nums[1] * nums[len(nums)-1]
	max2 := nums[len(nums)-3] * nums[len(nums)-2] * nums[len(nums)-1]
	if max1 > max2 {
		return max1
	}
	return max2
}

方法二:线性扫描,直接得到最大的三个数和最小的两个数

func maximumProduct(nums []int) int {
	max1, max2, max3 := math.MinInt32, math.MinInt32, math.MinInt32
	min1, min2 := math.MaxInt32, math.MaxInt32
	for i := range nums {
		if nums[i] > max1 {
			max3 = max2
			max2 = max1
			max1 = nums[i]
		} else if nums[i] > max2 {
			max3 = max2
			max2 = nums[i]
		} else if nums[i] > max3 {
			max3 = nums[i]
		}

		if nums[i] < min1 {
			min2 = min1
			min1 = nums[i]
		} else if nums[i] < min2 {
			min2 = nums[i]
		}
	}
	res1 := max1 * max2 * max3
	res2 := min1 * min2 * max1
	if res1 > res2 {
		return res1
	}
	return res2
}