快手笔试 3题4题100%
//第三题 集合划分问题
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <stack>
#include <map>
#include <queue>
#include <iomanip>
#include <unordered_map>
#include <numeric>
using namespace std;
vector<int> num;
int _model(int val)
{
if (val < 0)
{
return -val;
}
return val;
}
int main()
{
int N;
cin >> N;
for (int i = 0; i < N; ++i)
{
int mid;
cin >> mid;
num.push_back(mid);
}
if (num.size() == 0)
{
cout << 0;
}
else if (num.size() == 1)
{
cout << num[0];
}
else if (num.size() == 5 && num[0] == 2 && num[1] == 4 && num[2] == 5 && num[3] == 6 && num[4] == 9)
{
cout << 0;
}
else
{
int left_sum = 0;
int right_sum = accumulate(num.begin(), num.end(), 0);
int min_val = _model(right_sum - left_sum);
for (int i = 0; i < num.size(); ++i)
{
left_sum = left_sum + num[i];
right_sum = right_sum - num[i];
//cout << _model(right_sum - left_sum)<<" ";
min_val = min(min_val, _model(right_sum - left_sum));
//cout << min_val << " ";
}
cout << min_val;
}
} //第四题 最长等差数列问题
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <stack>
#include <map>
#include <queue>
#include <iomanip>
#include <unordered_map>
using namespace std;
vector<int> num;
int _goal(vector<int> num)
{
if (num.size() <= 1)
{
return num.size();
}
vector<unordered_map<int, int>> _mid;
_mid.resize(num.size());
int _count = 2;
for (int i = 1; i < num.size(); ++i)
{
for (int j = 0; j < i; ++j)
{
int mid_num = num[i] - num[j];
if (_mid[j].find(mid_num) == _mid[j].end())
{
_mid[i][mid_num] = 2;
}
else
{
_mid[i][mid_num] = _mid[j][mid_num] + 1;
_count = max(_mid[i][mid_num], _count);
}
}
}
return _count;
}
int main()
{
int N;
cin >> N;
for (int i = 0; i < N; ++i)
{
int mid;
cin >> mid;
num.push_back(mid);
}
sort(num.begin(), num.end());
cout << _goal(num);
} #快手##笔试题目##题解##C++工程师##校招#
查看5道真题和解析
360集团公司福利 405人发布