【LeetCode】力扣刷题之路 (20240422~20240426)

题目(20240422~20240426)

21.合并两个有序链表

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1
在这里插入图片描述

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2

输入:l1 = [], l2 = []
输出:[]

示例 3

输入:l1 = [], l2 = [0]
输出:[0]

提示

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1 和 l2 均按 非递减顺序 排列

代码

from typing import Optional


class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next


class Solution:
    # 创建链表
    def create_linked(self, values):
        h = ListNode(0)
        cur = h
        for val in values:
            cur.next = ListNode(val)
            cur = cur.next
        return h.next

    # 打印链表
    def print_linked(self, head):
        res = []
        while head:
            res.append(head.val)
            head = head.next
        return res

    # 合并两个链表
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        if not list1:
            return list2
        if not list2:
            return list1
        if list1.val < list2.val:
            list1.next = self.mergeTwoLists(list1.next, list2)
            return list1
        else:
            list2.next = self.mergeTwoLists(list1, list2.next)
            return list2


if __name__ == "__main__":
    # 21.合并两个有序链表 示例1
    l1 = [1, 2, 4]
    l2 = [1, 3, 4]
    s = Solution()
    l1 = s.create_linked(l1)
    l2 = s.create_linked(l2)
    res = s.mergeTwoLists(l1, l2)
    res = s.print_linked(res)
    print(res)  # 输出:[1,1,2,3,4,4]
    # 示例2
    l1 = []
    l2 = []
    res = s.mergeTwoLists(l1, l2)
    print(res)  # 输出:[]
    # 示例3
    l1 = []
    l2 = [0]
    res = s.mergeTwoLists(l1, l2)
    print(res)  # 输出:[0]

136.只出现一次的数字

给你一个非空整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

示例 1

输入:nums = [2,2,1]
输出:1

示例 2

输入:nums = [4,1,2,1,2]
输出:4

示例 3

输入:nums = [1]
输出:1

提示

  • 1 <= nums.length <= 3 * 104
  • -3 * 104 <= nums[i] <= 3 * 104
  • 除了某个元素只出现一次以外,其余每个元素均出现两次。

知识点回顾

异或运算(XOR):也被称为半加运算。是一种数学和逻辑运算符,其数学符号通常表示为“⊕”,在计算机编程中,异或可以用“xor”或“^”表示。异或运算的结果取决于两个比较的值,如果这两个值相同,则异或运算的结果为0;如果这两个值不同,则异或运算的结果为1;如果0和任何数异或运算则返回任何数本身。例如,0⊕0=0,0⊕1=1,1⊕0=1,1⊕1=0。

代码

from typing import List


class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        x = 0
        for i in nums:
            x ^= i
        return x


if __name__ == "__main__":
    # 136.只出现一次的数字 示例1
    nums = [2, 2, 1]
    s = Solution()
    res = s.singleNumber(nums)
    print(res)  # 输出:1
    # 示例2
    nums = [4, 1, 2, 1, 2]
    res = s.singleNumber(nums)
    print(res)  # 输出:4
    # 示例3
    nums = [1]
    res = s.singleNumber(nums)
    print(res)  # 输出:1

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值