本題目要求讀入n個整數,要求用最少的比較次數,輸出它們的最大值、第2大的值和第3大的值。例如,對於13 13 1 10 34 10這6個數,最大值為34,第2大的值為13,第3大的值為10。
輸入格式:
輸入有兩行。第一行為整數個數n(≤1 000 000),第二行給出n個以空格分隔的整數。
輸出格式:
對每一組輸入,在一行中輸出最大值、第2大的值和第3大的值值,中間以乙個空格分隔,但行尾沒有多餘空格。
如果輸入資料不足三個,則輸出「invalid input」。
如果沒有第3大的值,則輸出「there is no third largest element」。
如果沒有第2大和第3大的值,則輸出「there is no second largest and third largest element」。
輸入樣例:
613 13 1 10 34 10
輸出樣例:
34 13 10
一點分析:
這道題的資料量,可見龐大。一般的排序方法並不湊效(類似於冒泡演算法的這種),所以這裡的排序,用的是一種最「手把手」的方法。就是把輸入的數字不斷地與最大的數字進行比較,有點類似於線性表的插入操作。廢話不多說,直接上**。
#include#define max 10000000 //先來個巨集定義,為什麼數值是10000000,下面就解釋
int main()
for(i=0;i<=n-1;i++) //現在開始輸入數字
if(t>med&&t!=max&&t!=min&&t!=med) //一系列數中,可能會有相同數字
if(t>min&&t!=max&&t!=min&&t!=med)
}if(min==med&&min==-max) //這種情況會出現在所有數都一樣的情況下
if(min==-max) //一般情況,沒有第三大的數字
if(med==-max)//一般情況,沒有第二和第三大的數字
printf("%lld %lld %lld",max,med,min);
return 0;
}
第3題 求子陣列的最大和
第3題 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個正數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值 只求和,不記錄最大子陣列 要求 時間複雜度為o n 從左往右一遍掃瞄。package test003 created by cq on 2015 3 26.第三題...
求最大最小值的O(3n 2)演算法
演算法導論 上面第九章開章的演算法,簡單。貌似 程式設計之美 上面也有。include include time 0 include rand include using namespace std const int max vector size 10 int main cout ivec nu...
面試趣題 求不連續子陣列最大和的值
程式設計之美 一書上有一道題 給定乙個由n個整數元素組成陣列a,寫乙個函式在其中找出連續子陣列和的最大值。例如給定陣列為,則和最大的連續子陣列是,函式返回值是9。這是一道典型的動態規劃問題,書中循序漸進地通過分析給出了乙個時間複雜度為o n 空間複雜度為o 1 的最優解。我在面試時碰到了這道題的一道...