题目描述:
度度想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同,度度想买一顶价格第三便宜的帽子,问第三便宜的帽子价格多少?
输入描述:
首先输入一个正整数N(N <= 50),接下来输入N个数表示每顶帽子的价格(价格均是正整数,且小于等于1000)
输出描述:
如果存在第三便宜的帽子,请输出这个价格是多少,否则输出-1
输入例子:
1010 10 10 10 20 20 30 30 40 40
输出例子:
30
#include<iostream> #include<vector> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int main() { int n; cin>>n; if(n<3) { cout<<-1<<endl; return 0; } vector<int> v(n); for(int i=0;i<n;i++) cin>>v[i]; sort(v.begin(),v.end()); int j=0; bool flag=0; for(int i=1;i<n;i++) { if(v[j]!=v[i]) v[++j]=v[i]; if(j==2) { flag=1; break; } } if(flag)//若存在价格第三便宜的帽子 cout<<v[2]; else{ cout<<-1<<endl; return 0; } return 0; }时间复杂度为O(n)的解法:
#include <bits/stdc++.h> using namespace std; int main() { int n, i, j; cin >> n; int a[50] = {0}, hash[1001] = {0}; for (int i = 0; i < n; ++i) { cin >> a[i]; hash[a[i]] = 1; } for (i = 1, j = 3; i < 1001; ++i) { if (hash[i] == 1) --j; if (j == 0) break; } j > 0 ? cout << -1 : cout << i; return 0; }