給定乙個無序陣列,包含正數、負數和0,要求從中找出3個數的乘積,使得乘積最大,要求時間複雜度:o(n),空間複雜度:o(1)
輸入描述:
輸入共2行,第一行包括乙個整數n,表示陣列長度
第二行為n個以空格隔開的整數,分別為a1,a2, … ,an
輸出描述:
滿足條件的最大乘積
示例:
輸入:3 4 1 2
輸出:確定5個數,如果都是正數則,最大的是max1*max2*max3
如果有正有負,則max1*min1*min2
num_ele=int(raw_input())
input_array = list(map(int,raw_input().split(" ")))
max1,max2,max3=float("-inf"),float("-inf"),float("-inf")
min1,min2=float("inf"),float("inf")
index=0
while num_ele>0:
cur_num=input_array[index]
if cur_num>max1:
max3=max2
max2=max1
max1=cur_num
elif cur_num>max2:
max3=max2
max2=cur_num
elif cur_num>max3:
max3=cur_num
if cur_nummin2=min1
min1=cur_num
elif cur_nummin2=cur_num
index+=1
num_ele-=1
print(max(min1*min2*max1,max1*max2*max3))
由無序陣列中找到第K 大的元素
當然如果我們想要實現這個問題會有很多思路,可以將原來的陣列進行排序即可,直接隨機訪問到第k個元素即可。我們專門寫一篇部落格當然不是想利用這種思路的,可以試試改進的快速排序啊,對不,我個人覺得是利用了兩種思路乙個是快速排序乙個是二分查詢,在進行快速排序的時候,在指定範圍內找到該值的下標,如果該下標與k...
python 實現在無序陣列中找到中位數方法
一 問題描述 1 求乙個無序陣列的中位數,若陣列是偶數,則中位數是指中間兩個數字之和除以2,若陣列是奇數,則中位數是指最中間位置。要求 不能使用排序,時間複雜度盡量低 2 例如 lists 3,2,1,4 中位數為 2 3 2 2.5 lists 3,1,2 中位數為 2 3 演算法思想 利用快速排...
程式設計之美 子陣列的最大乘積
public class maxproduct for int a aa else 對應書上的解法1.空間換時間 public int maxproducta int a int n a.length int s new int n s 0 1 for int i 1 i n 1 i int t n...