Study Plan For Algorithms - Part13

WindMay發表於2024-08-27

1. K個一組翻轉連結串列
題目連結:https://leetcode.cn/problems/reverse-nodes-in-k-group/
給定連結串列的頭節點 head ,每 k 個節點一組進行翻轉,請返回修改後的連結串列。
k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,請將最後剩餘的節點保持原有順序。

class Solution:
    def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
        def reverse_list(head, k):
            prev = None
            curr = head
            for _ in range(k):
                next_node = curr.next
                curr.next = prev
                prev = curr
                curr = next_node
            return prev

        dummy = ListNode(0)
        dummy.next = head
        prev_group_tail = dummy

        while head:
            tail = head
            for i in range(k - 1):
                if tail.next:
                    tail = tail.next
                else:
                    prev_group_tail.next = head
                    return dummy.next

            next_group_head = tail.next
            tail.next = None

            new_head = reverse_list(head, k)
            prev_group_tail.next = new_head
            prev_group_tail = head
            head = next_group_head

        return dummy.next

2. 刪除有序陣列中的重複項
題目連結:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/
給定一個 非嚴格遞增排列 的陣列 nums ,請 原地 刪除重複出現的元素,使每個元素 只出現一次 ,返回刪除後陣列的新長度。元素的 相對順序 應該保持 一致 。然後返回 nums 中唯一元素的個數。

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        if not nums:
            return 0
        i = 0
        for j in range(1, len(nums)):
            if nums[j]!= nums[i]:
                i += 1
                nums[i] = nums[j]
        return i + 1

相關文章