Python每日一练(20230325)
目录
1. 按要求补齐数组 🌟🌟🌟
2. 重排链表 🌟🌟
3. 两数相加 🌟🌟
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:
输入: head = [1,2,3,4] 输出: [1,4,2,3]
示例 2:
输入: 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:
输入: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]
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
Golang每日一练 专栏 | |
Python每日一练 专栏 | |
C/C++每日一练 专栏 | |
Java每日一练 专栏 |
相关文章
- 二级Python选择题_二级python选择题题库
- 设置pycharm的python解释器_pycharm安装后无解释器
- python的进制转换器,Python进制转换[通俗易懂]
- python jieba库_Python jieba库的使用说明「建议收藏」
- Python入门系列(十一)一篇搞定python操作MySQL数据库
- python hashlib_Python hashlib模块实例使用详解
- 快速阶乘算法python_【最全】阶乘算法!(python和C语言)
- Python 技巧篇-pip卸载python库实例演示,查看pip命令大全方法[通俗易懂]
- 【说站】python类属性设置默认值
- 【说站】python两种数据类型的转换
- 【说站】python Selenium如何等待元素出现
- Python数组切片_python print数组
- python hexdump_笨办法学 Python · 续 练习 26:`hexdump`
- Python 生成随机数_python建立随机数列表
- 【测试开发】python系列教程:Python 运算符
- Python 异步: 等待任务集合(11)
- 【Python】Python 变量 ( 变量定义 | 修改变量值 | 变量数据类型 | type 获取数据类型 )
- 使用Python爬取MSSQL数据的经验分享(爬取mssql)
- Python在连接MSSQL数据库中的应用(python连mssql)
- Python完全新手教程
- python回调函数的使用方法