LeetCode(2023-10-20)


1653. 使字符串平衡的最少删除次数

1653. 使字符串平衡的最少删除次数

class Solution:
    def minimumDeletions(self, s: str) -> int:
        dp = [0 for i in range(len(s))]
        cnt_b = 0
        for i in range(len(s)):
            if s[i] == 'a':
                dp[i] = min(dp[i - 1] + 1, cnt_b)
            elif s[i] == 'b':
                dp[i] = dp[i - 1]
                cnt_b += 1
        return dp[-1]

2541. 使数组中所有元素相等的最小操作数 II

2541. 使数组中所有元素相等的最小操作数 II

class Solution:
    def minOperations(self, nums1: List[int], nums2: List[int], k: int) -> int:
        if sum(nums1) != sum(nums2):
            return -1
        if k == 0:
            if nums2 != nums1:
                return -1
            else:
                return 0
        rest = 0
        cnt = 0
        for i in range(len(nums1)):
            if (nums1[i] - nums2[i]) % k != 0:
                return -1
            need = (nums2[i] - nums1[i]) // k  # + 给 - 收
            if need == 0:
                continue
            if rest > 0 and need > 0:
                rest = rest - need
                cnt += abs(rest) if rest < 0 else 0
            elif rest < 0 and need < 0:
                rest = rest - need
                cnt += abs(rest) if rest > 0 else 0
            else:
                cnt += abs(need)
                rest = rest - need
        return cnt

1466. 重新规划路线

1466. 重新规划路线

class Solution:
    def __init__(self):
        self.cnt = 0

    def minReorder(self, n: int, connections: List[List[int]]) -> int:
        tree = [[] for i in range(n)]
        for i in range(n - 1):
            tree[connections[i][0]].append((connections[i][1], 1))
            tree[connections[i][1]].append((connections[i][0], -1))
        self.dfs(tree, 0, set())
        return self.cnt

    def dfs(self, tree: List[List[Tuple[int, int]]], node_index, used: set):
        node = tree[node_index]
        used.add(node_index)
        for i in range(len(node)):
            if node[i][0] in used:
                continue
            if node[i][1] == 1:
                self.cnt += 1
            self.dfs(tree, node[i][0], used)

884. 两句话中的不常见单词

884. 两句话中的不常见单词

class Solution:
    def uncommonFromSentences(self, s1: str, s2: str) -> List[str]:
        s = s1 + ' ' + s2
        s = s.split(' ')
        s_set = set()
        discard = set()
        for i in range(len(s)):
            if s[i] in discard:
                continue
            if s[i] in s_set:
                discard.add(s[i])
                s_set.discard(s[i])
            else:
                s_set.add(s[i])
        return list(s_set)

声明:Hello World|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - LeetCode(2023-10-20)


我的朋友,理论是灰色的,而生活之树是常青的!