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