zoukankan      html  css  js  c++  java
  • 求一个数组内找出三个数乘积最大并求解,来源于vscode.

    背景:在vscode中看到好多人提交了错误答案,至此刻没有看到对的答案。哈哈

    解法:

    function computeProduct(arr) {
                let max = 0
                let zarr = [],farr = []
                if(arr.length === 3){
                    max = arr[0]*arr[1]*arr[2]
                    return max
                }
                for(let i=0;i<arr.length;i++){
                    if(arr[i]>0){
                        zarr.push(arr[i])
                    }else{
                        farr.push(arr[i])
                    }
                }
                zarr.sort((a,b)=>b-a)
                farr.sort((a,b)=>a-b)
                if(farr.length === 1){
                    max = zarr[0]*zarr[1]*zarr[2]
                }else{
                    let num1 = zarr[0]*zarr[1]*zarr[2]
                    let num2 = zarr[0]*farr[0]*farr[1]
                    if(num1>num2){
                        max = num1
                    }else{
                        max = num2
                    }
                }
                return max
            }
            console.log(computeProduct([-10, 7, -200, 3, 5, -1, -7]))
    思路:
    1.如果数组就三个数,那无可厚非,就是三个数的乘积
    2.将数组分为正数数组和负数数组,两类
    3.比较正数数组排序之后,前三个数的乘积  和 一个正数和负数数组最小的两个数。不过有个前提,如果负数数组只有一个,那么不用比较了,最大的乘积就是正数数组的前三个。
    4.讲到这其实可以去看看最小的乘积了,利用这个思路,vscode上面的解法太多,大多数考虑不周到,所以还是要多思考。
  • 相关阅读:
    SOCKET 3次握手
    NativeXml帮助(四) http://gaoyanan.blog.sohu.com/162725319.html
    DELPHI下的SOCK编程(转)
    socket 编程入门教程(三)TCP原理:5、TCP的三次握手(threeway handshake)
    计算机术语的英文缩写
    提高查询速度方法总结
    复制表结构的通用存储过程
    QQ盗号工具代码(破解键盘锁)
    使用VB将SQL SERVER 的脚本导出
    2007第四周 关于逛街
  • 原文地址:https://www.cnblogs.com/MDGE/p/14393840.html
Copyright © 2011-2022 走看看