Description
Submission
- O(nlogn): Fast and Straight-forward for small-size problems.
#include <bits/stdc++.h> using namespace std; vector<string> split_string(string); // Complete the sockMerchant function below. int sockMerchant(int n, vector<int> ar) { sort(ar.begin(), ar.end()); int count = 0; for(int i = 0; i+1 < n; ++i) { if(ar[i] == ar[i+1]) { i++; count++; } } return count; } int main() { ofstream fout(getenv("OUTPUT_PATH")); int n; cin >> n; cin.ignore(numeric_limits<streamsize>::max(), '\n'); string ar_temp_temp; getline(cin, ar_temp_temp); vector<string> ar_temp = split_string(ar_temp_temp); vector<int> ar(n); for (int i = 0; i < n; i++) { int ar_item = stoi(ar_temp[i]); ar[i] = ar_item; } int result = sockMerchant(n, ar); fout << result << "\n"; fout.close(); return 0; } vector<string> split_string(string input_string) { string::iterator new_end = unique(input_string.begin(), input_string.end(), [] (const char &x, const char &y) { return x == y and x == ' '; }); input_string.erase(new_end, input_string.end()); while (input_string[input_string.length() - 1] == ' ') { input_string.pop_back(); } vector<string> splits; char delimiter = ' '; size_t i = 0; size_t pos = input_string.find(delimiter); while (pos != string::npos) { splits.push_back(input_string.substr(i, pos - i)); i = pos + 1; pos = input_string.find(delimiter, i); } splits.push_back(input_string.substr(i, min(pos, input_string.length()) - i + 1)); return splits; }
Submission(17 Days Before)
It’s the second time I solve this problem. The solution has been quite different.
- O(n)
#include <bits/stdc++.h> using namespace std; vector<string> split_string(string); // Complete the sockMerchant function below. int sockMerchant(int n, vector<int> ar) { int count[101] = {0}; int sum = 0; for(int a : ar) { count[a]++; } for(int i = 1; i <= 100; i++) { sum += (count[i] / 2); } return sum; } int main() { ofstream fout(getenv("OUTPUT_PATH")); int n; cin >> n; cin.ignore(numeric_limits<streamsize>::max(), '\n'); string ar_temp_temp; getline(cin, ar_temp_temp); vector<string> ar_temp = split_string(ar_temp_temp); vector<int> ar(n); for (int i = 0; i < n; i++) { int ar_item = stoi(ar_temp[i]); ar[i] = ar_item; } int result = sockMerchant(n, ar); fout << result << "\n"; fout.close(); return 0; } vector<string> split_string(string input_string) { string::iterator new_end = unique(input_string.begin(), input_string.end(), [] (const char &x, const char &y) { return x == y and x == ' '; }); input_string.erase(new_end, input_string.end()); while (input_string[input_string.length() - 1] == ' ') { input_string.pop_back(); } vector<string> splits; char delimiter = ' '; size_t i = 0; size_t pos = input_string.find(delimiter); while (pos != string::npos) { splits.push_back(input_string.substr(i, pos - i)); i = pos + 1; pos = input_string.find(delimiter, i); } splits.push_back(input_string.substr(i, min(pos, input_string.length()) - i + 1)); return splits; }