解题思路:
- 有0的情况: 如果数组中的某个元素为0,那么就代表着有一边手套颜色的数量为0。假设是左边手套的某种颜色数量为0,右边不为0,此时最终结果ret += 不为0的数。即有一端为0,另一端不为0,ret 就要加上不为0的那一端的数量。为什么呢?因为是天黑的情况,拿手套的人根本知道是否哪种颜色为0,所以对应位置的手套要全拿,以防出现最坏情况。
- 对于0的情况,我又思考了一番,我的理解是这样的:
- 其他情况:从左边求出总和,然后减去左边最小数量的颜色,再+1,即为左边所有的手套都可以覆盖到。同理,右边也是如此。最后,把为0的情况 + min(左边手套数量,右边手套数量) + 1 即为最终结果。
class Gloves {
public:
int findMinimum(int n, vector<int> left, vector<int> right) {
// write code here
int sumr = 0, minr = INT_MAX;
int suml = 0, minl = INT_MAX;
int ret = 0;
for(int i = 0; i < n; i++)
{
//若有一边手套颜色为0,另一边需要全拿,因为天黑我知道是否有为0
if(left[i] == 0 || right[i] == 0)
{
ret += left[i] + right[i];
}
else
{
sumr += right[i];
minr = min(right[i],minr);
suml += left[i];
minl = min(left[i],minl);
}
}
sumr = sumr - minr + 1;
suml = suml - minl + 1;
return ret + min(sumr,suml) + 1;
}
};

京公网安备 11010502036488号