jsは配列の中で3つの数の最大積を求めます.

1539 ワード

  • 考え方分析:配列を先に並べ替える.全部正数なら、最後の三桁の積が一番大きいです.負の数がある場合は、最小の二桁を掛け合わせた後、最後の桁と掛け合わせます.最後の三桁の積と比較して、大きいのを取ります.
  • 実現方法一
  • 配列の順序付け.
  • は、行列の最後の3つの項の積を計算する.
  • は、行列の最初の2つと最後の項目の積を計算する.
  • 計算結果が大きい方.
  • // An highlighted block
    function maxThreeSum (array) {
       var sort_array = array.sort((a, b)=>(a - b)),
             product1 = 1,
             product2 = 1,
             sort_array_length = sort_array.length - 1;
             for(var i = sort_array_length; i > sort_array_length - 3; i--) {
                 product1 = product1 * sort_array[i];
             }
             product2 = sort_array[0] * sort_array[1] * sort_array[sort_array_length];
             if (product1 > product2) return product1;
             return product2;
    }
    
    実現方法二
  • は依然として2つのケースです.最大3分の数の積または最大1つの数と最小2つの数の積(最小の2つは全部マイナスの場合).
  • は、長さ5の配列(サイズ順に並べられている)を予め与えておく.
  • 循環元配列は、必要な5つの値を配列の対応する位置に取得する.
  • は、最後の3つの項目と前の2つの項目と最後の積が大きいものを比較した結果である.
  • // An highlighted block
    function maxThreeSum (sourceAry) {
       var [a, b, c, d, e] = [Infinity, Infinity, -Infinity, -Infinity, -Infinity];
       sourceAry.forEach(item => {
           if (item < a) {
               b = a;
               a = item;
           } else if (item < b) {
               b = item;
           }
           if (item > e) {
               c = d;
               d = e;
               e = item;
           } else if (item > d) {
               c = d;
               d = item;
           } else if (item > c) {
               c = item;
           }
       });
       return Math.max(a * b * e, c * d * e);
    }