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