题解 | #手套#
手套
https://www.nowcoder.com/practice/365d5722fff640a0b6684391153e58d8
/*
* 1. 分别求出 可配对手套 之和
* [0,7,1,6]
* [1,5,0,6]
* 左手手套之和 = 7 + 6;
* 右手手套之和 = 5 + 6;
* 第一、三种颜色的手套不可配对,特殊处理,用一个 specialSum 将这些手套的数量统计起来
*
* 2. 从该手的可配对手套中选出能够涵盖所有颜色的只数
* min(左手手套之和,右手手套之和) - 该手套的最小值 + 1
* min(7+6, 5+6) - 5 + 1 = 7
*
* 3. 答案就是 7 + specialSum + 1(这一只表示从左手随便选出的一只)
*/
#include <climits>
class Gloves {
public:
int findMinimum(int n, vector<int> left, vector<int> right) {
int leftSum = 0;
int rightSum = 0;
int specialSum = 0;
int leftMin = INT_MAX; // 题目限制下,一只手最多25只手套
int rightMin = INT_MAX;
for(int i = 0; i < n; ++i)
{
if(left[i] * right[i] == 0)
{
specialSum += (left[i] + right[i]);
}
else
{
leftSum += left[i];
if(leftMin > left[i])
{
leftMin = left[i];
}
rightSum += right[i];
if(rightMin > right[i])
{
rightMin = right[i];
}
}
}
return specialSum + ((leftSum > rightSum) ? (rightSum - rightMin + 1) : (leftSum - leftMin + 1)) + 1;
}
};

