Python每日一练(20230325)

简介: Python每日一练(20230325)

1. 按要求补齐数组


给定一个已排序的正整数数组 nums,和一个正整数 n 。[1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums 中某几个数字的和来表示。请输出满足上述要求的最少需要补充的数字个数。


示例 1:

输入: nums = [1,3], n = 6

输出: 1  


解释:

根据 nums 里现有的组合 [1], [3], [1,3],可以得出 1, 3, 4。

现在如果我们将 2 添加到 nums 中, 组合变为: [1], [2], [3], [1,3], [2,3], [1,2,3]。

其和可以表示数字 1, 2, 3, 4, 5, 6,能够覆盖 [1, 6] 区间里所有的数。

所以我们最少需要添加一个数字。


示例 2:

输入: nums = [1,5,10], n = 20

输出: 2

解释: 我们需要添加 [2, 4]。


示例 3:

输入: nums = [1,2,2], n = 5

输出: 0


出处:

https://edu.csdn.net/practice/23718834

代码:

from typing import List
class Solution:
    def minPatches(self, nums: List[int], n: int) -> int:
        count = 0
        miss = 1
        idx = 0
        while miss <= n:
            if idx < len(nums) and nums[idx] <= miss:
                miss += nums[idx]
                idx += 1
            else:
                count += 1
                miss += miss
        return count
# %%
s = Solution()
print(s.minPatches(nums = [1,3], n = 6))
print(s.minPatches(nums = [1,5,10], n = 20))
print(s.minPatches(nums = [1,2,2], n = 5))

输出:

1

2

0


2. 重排链表


给定一个单链表 L 的头节点 head ,单链表 L 表示为:

L0 → L1 → … → Ln-1 → Ln  

请将其重新排列后变为:

L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …

不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

749247317f1c95079a7daa32d6b7da96.png


输入: head = [1,2,3,4]

输出: [1,4,2,3]

示例 2:

f425cb8c2d72409c26564abcdb8cb629.png


输入: head = [1,2,3,4,5]

输出: [1,5,2,4,3]


提示:

  • 链表的长度范围为 [1, 5 * 10^4]
  • 1 <= node.val <= 1000

出处:

https://edu.csdn.net/practice/23718835


代码:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class LinkList:
    def __init__(self):
        self.head=None
    def initList(self, data):
        self.head = ListNode(data[0])
        r=self.head
        p = self.head
        for i in data[1:]:
            node = ListNode(i)
            p.next = node
            p = p.next
        return r
    def convert_list(self,head):
        ret = []
        if head == None:
            return
        node = head
        while node != None:
            ret.append(node.val)
            node = node.next
        return ret
class Solution(object):
    def reorderList(self, head):
        """
        :type head: ListNode
        :rtype: None Do not return anything, modify head in-place instead.
        """
        if not head:
            return
        stack = []
        s = head
        while s.next:
            stack.append(s.next)
            s = s.next
        s = head
        n = 0
        while stack:
            if n % 2 == 0:
                one = stack.pop()
            else:
                one = stack.pop(0)
            one.next = None
            s.next = one
            s = s.next
            n += 1
# %%
l = LinkList()
list1 = [1,2,3,4]
list2 = [1,2,3,4,5]
s = Solution()
head = l.initList(list1)
print(l.convert_list(head))
s.reorderList(head)
print(l.convert_list(head))
head = l.initList(list2)
print(l.convert_list(head))
s.reorderList(head)
print(l.convert_list(head))

输出:

[1, 2, 3, 4]

[1, 4, 2, 3]

[1, 2, 3, 4, 5]

[1, 5, 2, 4, 3]


3. 两数相加


给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。


请你将两个数相加,并以相同形式返回一个表示和的链表。


你可以假设除了数字 0 之外,这两个数都不会以 0 开头。


示例 1:

3d2b007db4e6d4c6b2b5ec03d67f97e0.jpeg





输入:l1 = [2,4,3], l2 = [5,6,4]

输出:[7,0,8]

解释:342 + 465 = 807.


示例 2:

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

输出:[0]


示例 3:

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

输出:[8,9,9,9,0,0,0,1]


提示:

   每个链表中的节点数在范围 [1, 100] 内

   0 <= Node.val <= 9

   题目数据保证列表表示的数字不含前导零


出处:

https://edu.csdn.net/practice/23718836

代码:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class LinkList:
    def __init__(self):
        self.head=None
    def initList(self, data):
        self.head = ListNode(data[0])
        r=self.head
        p = self.head
        for i in data[1:]:
            node = ListNode(i)
            p.next = node
            p = p.next
        return r
    def convert_list(self,head):
        ret = []
        if head == None:
            return
        node = head
        while node != None:
            ret.append(node.val)
            node = node.next
        return ret
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        lrr = l1
        while True:
            l1.val = l1.val + l2.val
            if l1.next is None and l2.next is None and l1.val < 10:
                break
            if l1.next is None:
                l1.next = ListNode(0)
            if l2.next is None:
                l2.next = ListNode(0)
            if l1.val >= 10:
                l1.val = l1.val - 10
                l1.next.val += 1
            l1 = l1.next
            l2 = l2.next
        return lrr
# %%
l = LinkList()
list1 = [2,4,3]
list2 = [5,6,4]
l1 = l.initList(list1)
l2 = l.initList(list2)
s = Solution()
print(l.convert_list(s.addTwoNumbers(l1, l2)))
list1 = [9,9,9,9,9,9,9]
list2 = [9,9,9,9]
l1 = l.initList(list1)
l2 = l.initList(list2)
print(l.convert_list(s.addTwoNumbers(l1, l2)))



输出:

[7, 0, 8]

[8, 9, 9, 9, 0, 0, 0, 1]







目录
相关文章
|
Python 人工智能
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
247 1
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
|
Shell Unix Linux
Linux 终端命令之文件浏览(3) less
Linux 终端命令之文件浏览(3) less
173 0
Linux 终端命令之文件浏览(3) less
|
Rust
Rust 编程小技巧摘选(8)
Rust 编程小技巧摘选(8)
373 0
Rust 编程小技巧摘选(8)
|
算法 C++ 机器人
力扣 C++|一题多解之动态规划专题(1)
力扣 C++|一题多解之动态规划专题(1)
131 0
力扣 C++|一题多解之动态规划专题(1)
|
C++ Python 索引
Python Numpy入门基础(二)数组操作
Python Numpy入门基础(二)数组操作
187 0
Python Numpy入门基础(二)数组操作
|
C++ 存储
力扣C++|一题多解之数学题专场(1)
力扣C++|一题多解之数学题专场(1)
162 0
力扣C++|一题多解之数学题专场(1)
|
Java Go C++
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
167 0
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
|
Java Go C++
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
194 0
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
|
Java Go C++
Golang每日一练(leetDay0110) 零钱兑换I\II Coin Change
Golang每日一练(leetDay0110) 零钱兑换I\II Coin Change
174 0
Golang每日一练(leetDay0110) 零钱兑换I\II Coin Change
|
Java Go Rust
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II
163 0
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II

推荐镜像

更多