以下為簡單的虛擬碼
int getmaxprod() {
// max1,max2,min1,min2 儲存陣列索引值
//
// 找最大值
//
max1 <- 0 // 假設 num[0] 為最大值
for i <- 1 to (n-1) do
若 num[i] > num[max1] 則 max1 <- i
end for
swap(num[max1],num[0]) // 交換 num[max1]和 num[0]
// 找次大值
//
max2 <- 1 // 假設 num[1] 為次大值
for i <- 2 to (n-1) do
若 num[i] > num[max2] 則 max2 <- i
end for
swap(num[max2],num[1]) // 交換 num[max2]和 num[1]
prod1 <- num[0]*num[1] // 計算第一組最大乘積
// 找最小值
//
min1 <- 0 // 假設 num[0] 為最小值
for i <- 1 to (n-1) do
若 num[i] < num[min1] 則 min1 <- i
end for
swap(num[min1],num[0]) // 交換 num[min1]和 num[0]
// 找次小值
//
min2 <- 1 // 假設 num[1] 為次小值
for i <- 2 to (n-1) do
若 num[i] < num[min2] 則 min2 <- i
end for
swap(num[min2],num[1]) // 交換 num[min2]和 num[1]
prod2 <- num[0]*num[1] // 計算第二組最大乘積
// 最後結果
//
if prod1 > prod2 then
maxprod <- prod1
else
maxprod <- prod2
return maxprod;
}
過程用到四個迴圈,每個迴圈的時間複雜度為 O(n),
故加總起來還是為 O(n)