【LeetCode】力扣刷题之路
题目(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