/* * 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; } };