1. 程式人生 > >百度2017代碼

百度2017代碼

只需要 val alt while ber 想去 哈希 word algorithm

度度熊想去商場買一頂帽子,商場裏有N頂帽子,有些帽子的價格可能相同。度度熊想買一頂價格第三便宜的帽子,問第三便宜的帽子價格是多少?

思路堆排序,手寫堆較為復雜,只需要用三個數代替就好了,主要如果帽子價格相同要跳過循環。

#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { int N; cin >> N; vector<int> v(N, 0); for (int
i = 0; i<N; ++i) { cin >> v[i]; } int min1 = 1000, min2 = 1000, min3 = 1000; for (int i = 0; i<N; ++i) { if(v[i]==min1||v[i]==min2||v[i]==min3) continue; if (v[i]<min3) { if (v[i]<min2) { if (v[i] < min1) {
min3 = min2; min2 = min1; min1 = v[i]; } else { min3 = min2; min2 = v[i]; } } else min3 = v[i]; } } if (min3 == 1000) cout << -1;
else cout << min3; return 0; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 計數排序 類似哈希的思路,空間復雜度較大,用一個數組存價格,就是簡化吧的哈希,從最小的價格開始找,直到找到第三價格。 #include<iostream> using namespace std; int main(){ int n,t=0,syn=0; int price[1000]={0}; cin>>n; while(n--){ cin>>t; price[t]=1; } t=0; for(int i=0;i<1000;i++){ if(price[t]&&syn<3) syn++; if(syn==3) break; t++; } syn==3?cout<<t:cout<<-1; }

百度2017代碼