百度面試題--度度熊想去商場買一頂帽子,商場裡有N頂帽子,有些帽子的價格可能相同,度度熊想買一頂價格第三便宜的帽子,問第三便宜的帽子價格是多少?
阿新 • • 發佈:2019-02-01
第一種方法:可以使用LIst 進行每次加入時進行判斷是否包含,將重複的資料不再加入List中 最後再找出List中第三便宜的帽子,若list的size小於3輸出-1;
特點:每次加入資料都要進行判斷是否包含,最後也需要排序或者其他方法找出第三便宜。
第二種方法 :將所有的資料儲存在一個數組中,對陣列進行快排, 遍歷陣列後一位是否比前一位大 如果大把代表第幾便宜的標誌位進行自增 ,當標誌位為3時 輸出第三便宜的帽子 否則輸出-1;
特點:進行一次排序後 再遍歷陣列 時間複雜度為: nLog(n) + n =nLog(n).
第二種方法java實現原始碼:
import java.util.Arrays;
import java.util.Scanner;
/**
* 度度熊想去商場買一頂帽子,商場裡有N頂帽子,有些帽子的價格可能相同。
* 度度熊想買一頂價格第三便宜的帽子,問第三便宜的帽子價格是多少?
* 首先輸入一個正整數N(N <= 50),接下來輸入N個數表示每頂帽子的價格
* (價格均是正整數,且小於等於1000)
* 如果存在第三便宜的帽子,請輸出這個價格是多少,否則輸出-1
* @author Administrator
*
*/
public class SelectHat {
public static void main(String[] args) {
Scanner scan =new Scanner(System.in);
int count =scan.nextInt();
int price[] =new int[count];
for(int i=0;i<count;i++){
price[i]=scan.nextInt();
}
//快速排序
Arrays.sort(price);
//代表第幾便宜的帽子
int flag=1;
//迴圈
for(int i=0;i<count-1;i++){
if(price[i]<price[i+1]){
flag++;
}
//找出第三便宜的輸出
if(flag==3){
System.out.println(price[i+1]);
break;
}
}
if(flag!=3){
System.out.println(-1);
}
}
}