2491.划分技能点相等的团队
链接:2491.划分技能点相等的团队
难度:Medium
标签:数组、哈希表、双指针、排序
简介:给你一个正整数数组 skill ,数组长度为 偶数 n ,其中 skill[i] 表示第 i 个玩家的技能点。将所有玩家分成 n / 2 个 2 人团队,使每一个团队的技能点之和 相等 。
题解 1 - cpp
- 编辑时间:2022-12-04
- 执行用时:72ms
- 内存消耗:51.3MB
- 编程语言:cpp
- 解法介绍:排序后贪心判断。
#include <iostream>
#include <vector>
// bestlyg
# define X first
# define Y second
# define lb(x) ((x) & (-x))
# define mem(a,b) memset(a,b,sizeof(a))
# define debug freopen("r.txt","r",stdin)
# define pi pair<int,int>
#ifdef DEBUG
#define log(frm, args...) { printf(frm, ##args); }
#else
#define log(frm, args...)
#endif
typedef long long ll;
using namespace std;
class Solution {
public:
long long dividePlayers(vector<int>& skill) {
int n = skill.size();
sort(skill.begin(), skill.end());
int sum = skill[0] + skill[n - 1];
long long ans = 0;
for (int i = 0; i < n / 2; i++) {
if (skill[i] + skill[n - 1 - i] != sum) return -1;
ans += skill[i] * skill[n - 1 - i];
}
return ans;
}
};