從陣列中找出乘積最大的三個數

2021-08-07 16:38:12 字數 989 閱讀 2171

題目:

給定乙個無序陣列,包含正數、負數和0,要求從中找出3個數的乘積,使得乘積最大,要求時間複雜度:o(n),空間複雜度:o(1) 

輸入描述:

無序整數陣列a[n]

輸出描述:

滿足條件的最大乘積

輸入例子1:

3 4 1 2

輸出例子1:24

思路:

由於空間複雜度和時間複雜度的要求,肯定無法先排序,因為排序最好時為

o(n).整數的值任意需要分情況討論

1.當陣列的最大值<=0或者是陣列的最小值》=0時,乘積最大就是陣列中top3的乘積;

2.除第一種情況外,就需要考慮陣列中的最大的3個數和最小的2個數,因為最大乘積肯定是在(2小+1大)或(3大)   中取得,因此比較兩種記過就可得到最大乘積。

因此分析的,通過遍歷陣列有限次就可以實現該演算法。最多需要遍歷3次數組,額外空間最多為10個位元組。滿足演算法要求

**

public static void  pinduoduo()

}result=result*temp1;

temp1=long.min_value;//陣列的第三大值

int index2=-1;

for(int i=0;itemp1)

}result=result*temp1;

return result;

} else if(a[max_index]>0&&a[min_index]<0)

}for(int i=0;itempmax_3)

}long result1=a[min_index]*tempmin_2*a[max_index];

long result2=a[max_index]*tempmax_2*tempmax_3;

return result1>result2?result1:result2;

} return 0;

}

三個數最大的乘積

題目 給定乙個整型陣列,在陣列中找出由三個數組成的最大乘積,並輸出這個乘積。示例 1 輸入 1,2,3 輸出 6 示例 2 輸入 1,2,3,4 輸出 24 注意 給定的整型陣列長度範圍是 3,10 4 陣列中所有的元素範圍是 1000,1000 輸入的陣列中任意三個數的乘積不會超出32位有符號整數...

YTU 1061 從三個數中找出最大的數

時間限制 1 sec 記憶體限制 128 mb 提交 343 解決 245 提交 狀態 討論版 命題人 外部匯入 定義乙個帶參的巨集 或者模板函式 從三個數中找出最大的數。3個短整型數,空格隔開 3個實數,空格隔開 3個長整數,空格隔開 最大的數,對於實數保留2位小數。1 2 3 1.5 4.7 3...

三個數的最大乘積

給定乙個整型陣列,在陣列中找出由三個數組成的最大乘積,並輸出這個乘積。leetcode鏈結 示例 1 輸入 1,2,3 輸出 6示例 2 輸入 1,2,3,4 輸出 24注意 給定的整型陣列長度範圍是 3,104 陣列中所有的元素範圍是 1000,1000 輸入的陣列中任意三個數的乘積不會超出32位...