zoukankan      html  css  js  c++  java
  • 三个数的最大乘积-基于Go

    整形数组nums,在数组中找出由三个数字组成的最大乘积,并输出这个乘积。(乘积不会越界。不考虑超过int的最大值)
    重点考察线性扫描

    暴力破解

    • 先排序
    • 全是正数或全是负数,则nums[length-1]*nums[length-2]*nums[length-3]
    • 有负数有正数,则要么是nums[length-1]*nums[length-2]*nums[length-3],要么是nums[0]*nums[1]*nums[length-1]
    package main
    
    import (
    	"fmt"
    	"math"
    	"sort"
    )
    
    func find3MaxProduct(nums []int)int{
    	sort.Ints(nums)
    	length := len(nums)
    
    	res := math.Max(float64(nums[0]*nums[1]*nums[length-1]),
    		float64(nums[length-1]*nums[length-2]*nums[length-3]))
    	return int(res)
    }
    
    func main(){
    	var nums = []int{-11,-12,3,4,5,6}
    	fmt.Println(find3MaxProduct(nums))
    }
    
    

    线性扫描

    • 全是正数或全是负数,则nums[length-1]*nums[length-2]*nums[length-3]
    • 有负数有正数,则要么是nums[length-1]*nums[length-2]*nums[length-3],要么是nums[0]*nums[1]*nums[length-1]
    
    func find3MaxProduct2(nums []int)int{
    	var min1 = math.MaxInt64
    	var min2 = math.MaxInt64
    
    	var max1 = math.MinInt64
    	var max2 = math.MinInt64
    	var max3 = math.MinInt64
    
    	for _, v := range nums{
    		if v <min1{
    			min2 = min1
    			min1 = v
    		}else if v<min2{
    			min2 = v
    		}
    
    		if v>max1{
    			max3 = max2
    			max2 = max1
    			max1 = v
    		}else if v>max2{
    			max3 = max2
    			max2 = v
    		}else if v>max3{
    			max3 = v
    		}
    	}
    	res := math.Max(float64(min1*min2*max1),
    		float64(max1*max2*max3))
    	return int(res)
    }
    
  • 相关阅读:
    小小的疑问和小小的想法
    为什么你的代码不能给别人看?
    linux之中对文件名和文件进行编码转换
    数据泵导入导出步骤
    杭电acm1266
    杭电acm2097
    杭电acm2019
    杭电acm1395(转自牛人代码)
    杭电acm1279
    杭电acm1412
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14629082.html
Copyright © 2011-2022 走看看