一道某公司的筆試題,int*a1..n 整數陣列, 求n-1個數的乘積的最大值。只能用乘法,不用除法。
用除法就太簡單了,全部連乘,然後逐個除,注意判斷有0的,遍歷就最大。
第一眼反應分類討論,按照邏輯來分:
1) 有0的話, 若》=2個0, return 0;=1個0, 剩餘奇數個負數,return 0,偶數個,餘下乘積
2) 無0的話,n為奇,若奇個負數,去掉最大負數,偶個負數,去掉最小正數。
n為偶,若奇個負數,去掉最大負數,偶個負數,去掉最小正數。
**,一遍遍歷記錄0的個數,以及最大負數,最小正數index,然後根據情況返回值,最多需要兩趟遍歷,時復o(n)空復o(1)
後來看了答案思路基本一致,但是發現直接用第一遍遍歷的值p=a1....an 可以將其中的相同處理的case合併,例如p>0 就去掉最小正數,p<0 去掉最大負數,=0 則看0的count
之前看到過一道這個題目,當時沒仔細想,但是現在忘記在**看到了。。。
n個整數組成最大多位整數
設有n個正整數 n 100 將它們聯接成一排,組成乙個最大的多位整數。例如 n 3時,3個整數13,312,343聯接成的最大整數為 34331213 又如 n 4時,4個整數7,13,4,246聯接成的最大整數為 7424613 sample input 313 312 343 47 13 4 2...
返回乙個環狀整數陣列中最大子陣列之和
題目 返回乙個整數陣列中最大子陣列的和。要求 結對程式設計要求 分析 相比於上一次的任務,這次的不同在於,陣列是環狀的,求出所有可能子陣列之和的最大值,並確定該子陣列所在的位置。這時就會有兩種想法 a想到環狀,就想到了資料結構中的迴圈鍊錶,balabala。b其實也不難,只是加入環狀之後,每次搜尋子...
返回乙個整數陣列中最大子陣列的和。
該題的意思是 如果乙個陣列為 1 5 3 19 5 3 第乙個數之後若是該數與前乙個數之和大於該數那麼將這個和替換概數 即5 1 5,5不變 而5 3 5 則將三替換為8以此類推 當乙個數與前乙個數之和再次小於這個數時,這個數為乙個下乙個的最小陣列,如5 3 19 11 5 5 則5為下乙個最小陣列...