子数组最大乘积

子数组最大乘积

http://www.nowcoder.com/questionTerminal/9c158345c867466293fc413cff570356

此题求最大值,可以将动态规划数组的第 i 个数字表示为加入第 i 个位置数字后的最大值。但由于此题存在负数乘法,可能最小值变为最大值,所以需要将最大值与最小值为 amax,amin 都存储(按照原始动态规划应该存储在 dp 数组中,但由于更新只与上一状态有关,可以直接存储数字,更新即可,这样可节约内存),然后比较 maxdp[i-1]*arr[i],mindp[i-1]*arr[i],arr[i] 之间的最大值与最小值,并更新 amax,amin。将每个状态的 amax 的最大值作为结果返回。
注:此思想可用于有负数的子数组最大和或差

func maxProduct( arr []float64 ) float64 {
    // write code here
//     if len(arr) == 1{
//         return arr[0]
//     }
    amin,amax,res := arr[0],arr[0],arr[0]
    for i:=1;i<len(arr);i++{
        amax,amin = max(max(amin*arr[i],amax*arr[i]),arr[i]),min(min(arr[i]*amin,arr[i]*amax),arr[i])
        res = max(amax,res)
    }
    return res
}

func max(i,j float64)float64{
    if i>j{
        return i
    }else{
        return j
    }
}

func min(i,j float64)float64{
    if i > j{
        return j 
    }else{
        return i
    }
}
全部评论

相关推荐

02-11 17:51
腾讯_TEG_技术
点赞 评论 收藏
分享
2024-12-27 10:21
已编辑
海南师范大学 媒介策划
到我怀里来:身高体重住址这些就别写了,留几个关键的就行,工作经历突出重点写详细点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务