# 2021/4/5
合并两个有序数组
【题目】
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
示例 1:
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6]
【我的代码】
采用插入排序法的思路。
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
k = m + n - 1
i = m - 1
j = n - 1
while j >= 0 and i >= 0:
if nums1[i] <= nums2[j]:
nums1[k] = nums2[j]
j -= 1
else:
nums1[k] = nums1[i]
nums1[i] = 0
i -= 1
k -= 1
while j >= 0:
nums1[j] = nums2[j]
j -= 1
执行结果:
执行用时:40 ms, 在所有 Python3 提交中击败了62.39%的用户
内存消耗:14.6 MB, 在所有 Python3 提交中击败了99.45%的用户
【其他方法】
@DarkArmedL1 的评论:
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
i, j = m - 1, n - 1
while j >= 0:
if i >= 0 and nums1[i] > nums2[j]:
nums1[i + j + 1] = nums1[i]
i -= 1
else:
nums1[i + j + 1] = nums2[j]
j -= 1
执行结果:
执行用时:36 ms, 在所有 Python3 提交中击败了83.31%的用户
内存消耗:15 MB, 在所有 Python3 提交中击败了11.26%的用户
删除链表中的节点
【题目】
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。
现有一个链表 -- head = [4,5,1,9],它可以表示为:
示例 1:
输入:head = [4,5,1,9], node = 5
输出:[4,1,9]
解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
【我的代码】
完全没懂题意,直接看评论了。。。
【其他代码】
@SaphireStar 的评论:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteNode(self, node):
"""
:type node: ListNode
:rtype: void Do not return anything, modify node in-place instead.
"""
node.val = (node.next).val
node.next = (node.next).next
执行结果:
执行用时:48 ms, 在所有 Python3 提交中击败了66.29%的用户
内存消耗:14.7 MB, 在所有 Python3 提交中击败了97.97%的用户