1. 程式人生 > >百度面試題--度度熊想去商場買一頂帽子,商場裡有N頂帽子,有些帽子的價格可能相同,度度熊想買一頂價格第三便宜的帽子,問第三便宜的帽子價格是多少?

百度面試題--度度熊想去商場買一頂帽子,商場裡有N頂帽子,有些帽子的價格可能相同,度度熊想買一頂價格第三便宜的帽子,問第三便宜的帽子價格是多少?

第一種方法:可以使用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);
		}		
	}
}