Python 1-05 控制流练习
  1Hh2sdYQZd4C 2023年11月02日 45 0


2591. 将钱分给最多的儿童

class Solution:
    def distMoney(self, money: int, children: int) -> int:
        if money < children: return -1
        money -= children # 每人至少 1 美元
        res = min(money // 7, children) # 初步分配,让尽量多的人分到 8 美元
        money -= res * 7
        children -= res
        if (children == 0 and money > 0) or (children == 1 and money == 3):
            res -= 1
        return res

2706. 购买两块巧克力

算法:最小值与次最小值

class Solution:
    def buyChoco(self, prices: List[int], money: int) -> int:
        a = b = inf
        for x in prices:
            if x < a:
                b, a = a, x
            elif x < b:
                b = x
        return money - a - b if a + b <= money else money

374. 猜数字大小

算法:二分查找

# The guess API is already defined for you.
# @param num, your guess
# @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
# def guess(num: int) -> int:

class Solution:
    def guessNumber(self, n: int) -> int:
        l, r = 1, n
        while l <= r:
            mid = l + r >> 1
            if guess(mid) == 1: l = mid + 1
            elif guess(mid) == -1: r = mid - 1
            else: return mid

1732. 找到最高海拔

算法:差分逆运算前缀和

class Solution:
    def largestAltitude(self, gain: List[int]) -> int:
        res = acc = 0
        for x in gain:
            acc += x
            if acc > res: res = acc
        return res

1413. 逐步求和得到正数的最小值

算法:前缀和

class Solution:
    def minStartValue(self, nums: List[int]) -> int:
        ans, acc = 1, 0
        for x in nums:
            acc += x
            if acc < 0:
                ans = max(ans, 1 - acc)
        return ans

2057. 值相等的最小索引

class Solution:
    def smallestEqual(self, nums: List[int]) -> int:
        for i, x in enumerate(nums):
            if i % 10 == x: return i
        return -1

1217. 玩筹码

第 i 个芯片的 位置 是 position[i],注意不是筹码数。
知识点: for, %, min(), +=

class Solution:
    def minCostToMoveChips(self, position: List[int]) -> int:        
        # odd = even = 0
        # for k in position:
        #     if k % 2: odd += 1
        #     else: even += 1
        # return min(even, odd)
        
        # d = [0, 0]
        # for i in position: d[i%2] += 1
        # return min(d)

        return min(x := sum(i & 1 for i in position), len(position) - x)

1184. 公交站间的距离

class Solution:
    def distanceBetweenBusStops(self, distance: List[int], start: int, destination: int) -> int:       
        if destination < start: # 交换出发点和目的地距离相等
            start, destination = destination, start            
        d = sum(distance[start : destination]) # 出发点到目的地距离
        return min(d, sum(distance) - d)

2057. 值相等的最小索引

class Solution:
    def smallestEqual(self, nums: List[int]) -> int:
        for i, x in enumerate(nums):
            if i % 10 == x: return i
        return -1

2455. 可被三整除的偶数的平均值

class Solution:
    def averageValue(self, nums: List[int]) -> int:
        sum = count = 0
        for x in nums:
            if x % 6 == 0:
                sum += x
                count += 1
        return 0 if count == 0 else sum // count

2078. 两栋颜色不同且距离最远的房子

class Solution:
    def maxDistance(self, colors: List[int]) -> int:
        n = len(colors)
        res = 0   # 两栋颜色不同房子的最远距离
        # 遍历两栋房子下标并维护最远距离
        for i in range(n):
            for j in range(i + 1, n):
                if colors[i] != colors[j]:
                    res = max(res, j - i)
        return res

优化

class Solution:
    def maxDistance(self, colors: List[int]) -> int:
        n = len(colors)
        c = colors[0]
        if c != colors[-1]: return n - 1
        i, j = 1, n - 2
        while colors[i] == c: i += 1
        while colors[j] == c: j -= 1
        return max(j, n - i - 1)

2073. 买票需要的时间

class Solution:
    def timeRequiredToBuy(self, tickets: List[int], k: int) -> int:
        n = len(tickets)
        res = 0
        for i in range(n):
            # 遍历计算每个人所需时间
            if i <= k:
                res += min(tickets[i], tickets[k])
            else:
                res += min(tickets[i], tickets[k] - 1)
        return res

1848. 到目标元素的最小距离

class Solution:
    def getMinDistance(self, nums: List[int], target: int, start: int) -> int:
        res = inf
        for i, x in enumerate(nums):
            if x == target:
                res = min(res, abs(i - start))
        return res


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
1Hh2sdYQZd4C