LeetCode(2023-12-14)


2697. 字典序最小回文串

2697. 字典序最小回文串

from collections import deque


class Solution:
    def makeSmallestPalindrome(self, s: str) -> str:
        q = deque()
        if len(s) % 2 == 0:
            p0 = len(s) // 2 - 1
            p1 = len(s) // 2
        else:
            q.append(s[len(s) // 2])
            p0 = len(s) // 2 - 1
            p1 = len(s) // 2 + 1
        while p0 >= 0:
            if s[p0] <= s[p1]:
                q.append(s[p0])
                q.appendleft(s[p0])
            else:
                q.append(s[p1])
                q.appendleft(s[p1])
            p0 -= 1
            p1 += 1
        return ''.join(q)

775. 全局倒置与局部倒置

775. 全局倒置与局部倒置

class Solution:
    def isIdealPermutation(self, nums: List[int]) -> bool:
        min_num = 0
        i = 0
        while i < len(nums):
            if nums[i] == min_num:
                min_num += 1
                i += 1
                continue
            elif nums[i] == min_num + 1:
                if nums[i + 1] == min_num:
                    i += 2
                    min_num += 2
                    continue
                else:
                    return False
            else:
                return False
        return True

1791. 找出星型图的中心节点

1791. 找出星型图的中心节点

from collections import defaultdict


class Solution:
    def findCenter(self, edges: List[List[int]]) -> int:
        n = len(edges)
        d = defaultdict(int)
        for i in range(n):
            d[edges[i][0]] += 1
            d[edges[i][1]] += 1
            if d[edges[i][0]] >= 2:
                return edges[i][0]
            if d[edges[i][1]] >= 2:
                return edges[i][1]

面试题 02.01. 移除重复节点

面试题 02.01. 移除重复节点

class Solution:
    def removeDuplicateNodes(self, head: ListNode) -> ListNode:
        if not head:
            return None
        vals = set()
        p = head
        vals.add(p.val)
        while p.next:
            if p.next.val not in vals:
                vals.add(p.next.val)
                p = p.next
                continue
            p.next = p.next.next
        return head

455. 分发饼干

455. 分发饼干

class Solution:
    def findContentChildren(self, g: List[int], s: List[int]) -> int:
        g.sort()
        s.sort()
        ans = 0
        while g and s:
            g_val = g.pop()
            s_val = s.pop()
            if s_val >= g_val:
                ans += 1
                continue
            else:
                while g:
                    g_val = g.pop()
                    if s_val >= g_val:
                        ans += 1
                        break
        return ans

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

转载:转载请注明原文链接 - LeetCode(2023-12-14)


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