[逻辑题]手套问题

88 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

问题

image.png

思路

  1. 先取出左边/右边的全部手套,再在另一边取出一只手套,但是这样达不到题目至少的要求;
  2. 为此,还要减去左边/右边手套中最少的手套类别,也就是最终取出的手套总数=单边手套总数-哪种颜色手套最少的手套数量+1
  3. 当出现某种颜色为0的情况,还应该在手套总数基础上加上该颜色的两边手套数量。

代码实现

# -*- coding:utf-8 -*-

class Gloves:
    def findMinimum(self, n, left, right):
        # write code here
        sum_left = 0
        sum_right = 0
        min_left = 30
        min_right = 30
        total = 0
        
        for i in range(n):
            if (left[i] * right[i] == 0):
                total += (left[i] + right[i])
            else:
                min_left = min(min_left, left[i])
                min_right = min(min_right, right[i])
                sum_left += left[i]
                sum_right += right[i]
                
        return total + min(sum_left - min_left + 1, sum_right - min_right + 1) + 1