Python|每日一练|树|深度优先搜索|数组|二分查找|链表|双指针|单选记录:填充每个节点的下一个右侧节点指针|搜索插入位置|旋转链表

news2024/10/2 10:36:51

1、填充每个节点的下一个右侧节点指针(树,深度优先搜索)

给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

struct Node {

int val;

Node *left;

Node *right;

Node *next;

}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL

初始状态下,所有 next 指针都被设置为 NULL

 

进阶:

  • 你只能使用常量级额外空间。
  • 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。

 

示例:

https://img-service.csdnimg.cn/img_convert/27903dce19b8e06520fe489475e37ae7.png

输入:root = [1,2,3,4,5,6,7]

输出:[1,#,2,3,#,4,5,6,7,#]

解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束。

 

提示:

  • 树中节点的数量少于 4096
  • -1000 <= node.val <= 1000

选项代码:

class Node(object):
    def __init__(self, val, left, right, next):
        self.val = val
        self.left = left
        self.right = right
        self.next = next
class Solution(object):
    def connect(self, root):
        """
        :type root: Node
        :rtype: Node
        """
        if not root:
            return
        node = [root]
        while node:
            l = len(node)
            for n in range(l):
                cur = node.pop(0)
                if n < (l - 1):
                    cur.next = node[0]
                if cur.left:
                    node.append(cur.left)
                if cur.right:
                    node.append(cur.right)
        return root

2、搜索插入位置(数组,二分查找)

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 1:

输入: [1,3,5,6], 5

输出: 2

示例 2:

输入: [1,3,5,6], 2

输出: 1

示例 3:

输入: [1,3,5,6], 7

输出: 4

示例 4:

输入: [1,3,5,6], 0

输出: 0

选项代码:

class Solution:
    def searchInsert(self, nums, target):
        l, r = int(0), len(nums) - 1
        while l < r:
            mid = int((l + r) / 2)
            if nums[mid] < target:
                l = mid + 1
            else:
                r = mid
        if nums[l] < target:
            return l + 1
        return l
if __name__ == '__main__':
    s = Solution()
    print (s.searchInsert( [1,3,5,6], 7))

3、旋转链表(链表,双指针)

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

 

示例 1

https://img-service.csdnimg.cn/img_convert/c0d8ae472058ab78d44488d3d18b7d34.jpeg

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

示例 2

https://img-service.csdnimg.cn/img_convert/b36376b20ad1074341ffc8bca9a32eca.jpeg

输入:head = [0,1,2], k = 4
输出:[2,0,1]

 

提示:

  • 链表中节点的数目在范围 [0, 500] 
  • -100 <= Node.val <= 100
  • 0 <= k <= 2 * 109

选项代码:

class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None
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 rotateRight(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        if not head or k == 0:
            return head
        slow = fast = head
        length = 1
        while k and fast.next:
            fast = fast.next
            length += 1
            k -= 1
        if k != 0:
            k = (k + length - 1) % length
            return self.rotateRight(head, k)
        else:
            while fast.next:
                fast = fast.next
                slow = slow.next
            return self.rotate(head, fast, slow)
    def rotate(self, head, fast, slow):
        fast.next = head
        head = slow.next
        slow.next = None
        return head
# %%
l = LinkList()
list1 =  [0,1,2]
k = 4
l1 = l.initList(list1)
s = Solution()
print(l.convert_list(s.rotateRight(l1, k)))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/352575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

同一个整型常量怎样在不同进制间之间转换?

整型常量可以分别用二进制、八进制、十进制和十六进制表示&#xff0c;不同的进制并不影响数据本身的大小&#xff0c;同一个整型常量可以在不同进制之间转换&#xff0c;具体转换方式如下。1.十进制和二进制之间的转换(1)十进制转二进制。十进制转换成二进制就是一个除以2取余…

INDEMIND:2023,服务机器人能否“狂飙”?

过去一年&#xff0c;服务机器人的发展并不顺利。头部厂商的变动&#xff0c;市场增长率的持续下降不由得让人质疑&#xff0c;2023年&#xff0c;服务机器人还能“狂飙”吗&#xff1f;短期的市场波动&#xff0c;并不能代表行业的未来走向&#xff0c;而行业的两面矛盾现象&a…

珞珈1号-数据预处理流程

珞珈1号-数据预处理流程 1、重投影Albers 2、重采样 3、辐射校正–将INT32转化为浮点型真实数据 4、统一量纲(eg:和NPP同一量纲) 5、去噪 1、重投影Albers 参考这篇文章 2、重采样 输入想要重采样的数据&#xff0c;其中X和Y是你想要的大小&#xff0c;125即是重采样至125m …

kaggle竞赛-宠物受欢迎程度(赛题讲解与数据分析)

比赛官网地址 赛题介绍 petfinder是马来西亚领先的动物福利平台宠物网站地址 该网站使用可爱指数来排名宠物照片。它分析了图片组成和其他因素&#xff0c;并与数千个宠物档案的表现进行了比较。 在这场比赛中&#xff0c;你将分析原始图像和元数据来预测宠物照片的“Pawp…

Word控件Spire.Doc 【Table】教程(16):C#/VB.NET:在 Word 表格中插入或提取图像

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

JMM(Java内存模型)及volatile关键字

JMM(Java内存模型 Java Memory Model&#xff0c;简称JMM)JMM(Java内存模型 Java Memory Model&#xff0c;简称JMM)本身是一种抽象的概念并不真实存在&#xff0c;它描述的是一组规则或者规范&#xff0c;通过这组规范定义了程序中各个变量&#xff08;包括实例字段&#xff0…

干货分享|数据可视化报表制作技巧

脑中想得再好&#xff0c;也要看最终的效果呈现。但偏偏有些用户分析思维不差&#xff0c;就是数据分析报表的制作拖了后腿&#xff0c;导致始终无法完美呈现数据可视化分析效果。本文将总结奥威BI软件上的常用的数据可视化报表制作技巧&#xff0c;供大家随时查阅。 BI数据可…

搭建Hexo博客-第1章-Git和GitHub以及Coding的简单用法

搭建Hexo博客-第1章-Git和GitHub以及Coding的简单用法 搭建Hexo博客-第1章-Git和GitHub以及Coding的简单用法 Coding GitHub Hexo Markdown 搭建博客 大家好&#xff0c;这是我第一次写博客。使用 GitHub Hexo 创建最基本的博客很容易&#xff0c;网上有很多现成的教程。…

SCI论文写作神器集合 —— 超级实用

特此声明&#xff1a; 本文拷贝多处别人的内容&#xff0c;并给出具体的链接 本文所提到的软件都为博主在文章撰写过程中发掘的比较实用的工具&#xff0c;旨在帮助小伙伴们更快更有效率的完成文章发表&#xff0c;如果其他好用的工具&#xff0c;欢迎各位交流~~ 一、文献搜索神…

XCP实战系列介绍14-基于Vector_Davinci工具的XCP配置介绍(三)

本文框架 1.概述2. 其他模块配置2.1 XCP初始化3. 手工代码部分3.1 周期函数添加3.2 DAQ Event调用3.3 XCP模块本身代码3.4 标定量的添加1.概述 在对XCP的配置部分介绍中我们计划分别对通讯部分配置、XCP模块本身配置及其他相关模块配置三篇进行介绍,在前两篇我们介绍了XCP配置…

SAP PP工单确认完成(CNF)状态取消方法

这SAP PP工单确认完成&#xff08;CNF&#xff09;状态取消方法SAP PP工单确认完成&#xff08;CNF&#xff09;状态取消方法SAP PP工单确认完成&#xff08;CNF&#xff09;状态取消方法 工单完工后取消了其中的一个报工&#xff0c;然后无法再报工 此时再报工&#xff0c;系…

使用 Docker 镜像

author: aming email: jikcheng163.com title: Docker 使用镜像 creation_date: 2023-01-05 22:58 Last modified date: 2023-01-30 23:01 tags: Docker 使用镜像 File Folder with relative path: reading notes/doc/Dokcer 实践 remark: other: 本章背景知识 1、镜像是三大…

Allegro走线时如何自动关闭其它网络飞线显示操作指导

Allegro走线时如何自动关闭其它网络飞线显示操作指导 在做PCB设计的时候,尤其是在评估布线的时候,走某一个网络的时候,希望其它网络的飞线会被自动关闭,方便评估。 Allegro支持这个功能,如下图 走线前 走线后 具体操作如下 点击Route

Spring3事务

简介 数据库事务是数据库管理系统执行过程中的一个逻辑单位&#xff0c;由一个有限的数据库操作序列构成&#xff1b;在企业级开发应用中&#xff0c;事务管理是必不可少的技术&#xff0c;它被用来保证数据的完整性和一致性 事务的四大特性(ACID) 原子性(Atomicity)&#xf…

【黑马SpringCloud(7)】分布式事务

分布式事务事务的ACID原则分布式事务理论基础CAP定理BASE理论Seataseata的部署seata的集成事务模式XA模式Seata的XA模型优缺点实现XA模式AT模式案例&#xff1a;AT模式更新数据脏写问题优缺点实现AT模式TCC模式流程分析Seata的TCC模型事务悬挂和空回滚实现TCC模式优缺点SAGA模式…

MySQL8.x group_by报错的4种解决方法

在我们使用MySQL的时候总是会遇到各种各样的报错&#xff0c;让人头痛不已。其中有一种报错&#xff0c;sql_modeonly_full_group_by&#xff0c;十分常见&#xff0c;每次都是老长的一串出现&#xff0c;然后带走你所有的好心情&#xff0c;如&#xff1a;LIMIT 0, 1000 Error…

《Qt6开发及实例》6-2 Qt6基础图形的绘制

目录 一、绘图框架设计 二、绘图区的实现 2.1 PaintArea类 2.2 PaintArea类讲解 三、主窗口的实现 3.1 MainWidget类 3.2 MainWidget类讲解 3.3 槽函数编写 3.5 其他内容 一、绘图框架设计 界面 两个类 ​ 二、绘图区的实现 2.1 PaintArea类 ​paintarea.h #ifndef…

uniApp消息推送(极光/阿里云)

目录 一、极光推送 1.1、在极光官网创建应用 1.2、插件下载 1.3、代码填充 1.4、发送通知/消息 二、阿里云推送 2.1、在阿里云官网创建应用 2.2、插件下载 2.3、代码填充 2.4、发给后端的值(API类型的通知 一、极光推送 1.1、在极光官网创建应用 参考 极光文档 (ji…

c/c++开发,无可避免的模板编程实践(篇三)

一、模板与多态 多态就是通过单一命名标记关联不同特定行为的能力。在C中&#xff0c;主要是通过继承和虚函数来实现&#xff0c;由于继承和虚函数主要是在运行期进行处理&#xff0c;因此c把这种多态称为“动多态”。而通过函数重载方式也可以单一命名标记关联不同行为&#x…

TrueNas篇-硬盘直通

硬盘直通 在做硬盘直通之前&#xff0c;在trueNas(或者其他虚拟机)内是检测不到安装的硬盘的。 在pve节点查看硬盘信息 打开pve的shell控制台 输入下面的命令查看硬盘信息&#xff1a; ls -l /dev/disk/by-id/该命令会显示出实际所有的硬盘设备信息&#xff0c;其中ata代…