7.17题目练习

news2024/9/30 23:38:01

目录

1.二叉树的最近公共祖先 

 2.从前序与中序遍历序列构造二叉树

 3.最小k个数



1.二叉树的最近公共祖先 

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 * int val;
 * TreeNode left;
 * TreeNode right;
 * TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root == null) {
            return null;
        }
        if (root == p || root == q) {
            return root;
        }
        TreeNode leftTree = lowestCommonAncestor(root.left, p, q);
        TreeNode rightTree = lowestCommonAncestor(root.right, p, q);
        if (leftTree != null && rightTree != null) {
            return root;
        } else if (leftTree != null) {
            return leftTree;
        } else {
            return rightTree;
        }
    }
}
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 * int val;
 * TreeNode left;
 * TreeNode right;
 * TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean getPath(TreeNode root, TreeNode node, Stack<TreeNode> stack) {

        if (root == null) {
            return false;
        }
        stack.push(root);
        if (root == node) {
            return true;
        }
        boolean ret1 = getPath(root.left, node, stack);
        if (ret1) {
            return true;
        }
        boolean ret2 = getPath(root.right, node, stack);
        if (ret2) {
            return true;
        }
        stack.pop();
        return false;
    }

    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode P, TreeNode q) {
        if (root == null) {
            return null;
        }
        Stack<TreeNode> stackp = new Stack<>();
        Stack<TreeNode> stackq = new Stack<>();
        getPath(root, P, stackp);
        getPath(root, q, stackq);
        int sizep = stackp.size();
        int sizeq = stackq.size();
        if (sizep > sizeq) {
            int size = sizep - sizeq;
            while (size != 0) {
                stackp.pop();
                size--;
            }
        } else {
            int size = sizeq - sizep;
            while (size != 0) {
                stackq.pop();
                size--;
            }
        }
        while (!stackp.isEmpty() && !stackq.isEmpty()) {
            if (stackq.peek() == stackp.peek()) {
                return stackq.peek();
            } else {
                stackq.pop();
                stackp.pop();
            }
        }
        return null;
    }
}

 2.从前序与中序遍历序列构造二叉树

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int preindex;
    public TreeNode buildTree(int[] preorder, int[] inorder) {
       return buildTreeChild(preorder,inorder,0,inorder.length - 1);
    }
    public TreeNode buildTreeChild(int[] preorder,int[] inorder,int inbegin ,int inend){
        //这种情况下 表明当前root没有子树了
        if(inbegin > inend){
            return null;
        }
        TreeNode root = new TreeNode(preorder[preindex]);
        int rootIndex = findVal(inorder,inbegin,inend,preorder[preindex]);
        preindex++;
        root.left = buildTreeChild(preorder,inorder,inbegin,rootIndex - 1);
        root.right = buildTreeChild(preorder,inorder,rootIndex + 1,inend);
        return root;
    }
    private int findVal(int[] inorder ,int inbegin,int inend,int val){
        for(int i = inbegin ; i <= inend ; i++){
            if(inorder[i] == val){
                return i;
            }
        }
        return -1;
    }
}

 3.最小k个数

class Solution {
//时间复杂度为nlogN + klogN
    public int[] smallestK(int[] arr, int k) {
         PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
       for(int i = 0; i < arr.length;i++){
        priorityQueue.offer(arr[i]);
       }
       int[] ret = new int[k];
       for(int i = 0; i < k ; i++){
        ret[i] = priorityQueue.poll();
       }
       return ret;
    }
}

 方法二

class Intmp implements Comparator<Integer> {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2.compareTo(o1);
    }
}

class Solution {
    public int[] smallestK(int[] arr, int k) {
        int[] ret = new int[k];
        if (arr == null || k == 0) {
            return ret;
        }
//k*logk
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(k, new Intmp());
        for (int i = 0; i < k; i++) {
            priorityQueue.offer(arr[i]);
        }
//(n - k)logk
        for (int i = k; i < arr.length; i++) {
            int peekVal = priorityQueue.peek();
            if (arr[i] < peekVal) {
                priorityQueue.poll();
                priorityQueue.offer(arr[i]);
         }
        }
        for (int i = 0; i < k; i++) {
            ret[i] = priorityQueue.poll();
        }
        return ret;
    }
}

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

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

相关文章

余承东再次否认“遥遥领先”禁令:没有罚款一说,被喊烂了

7月29日&#xff0c;问界第四十万台新车在赛力斯超级工厂正式下线。在下线仪式上&#xff0c;华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东再次否认了外界关于其被禁提“遥遥领先”一次的传闻&#xff0c;在谈及问界M9时&#xff0c;他表示&#xff0c;问界M9不…

java基础 之 equals和==的区别

文章目录 浅谈“”特点比较基本类型比较引用类型 浅谈“equals”背景和使用重写equals自定义类为什么需要重写equals方法 总结附录代码及文章推荐 前言&#xff1a; 1、8大基本数据类型&#xff0c;它们的值直接代表了某种数据&#xff0c;不是对象的实例&#xff0c;不能使用n…

DeepSpeed基础及内存优化特性

DeepSpeed 1.基础概念 DeepSpeed是一个由Microsoft 公司开发的开源深度学习优化库&#xff0c;旨在提高大规模模型训练的效率和可扩展性&#xff0c;使研究人员和工程师能够更快地迭代和探索新的深度学习模型和算法。它采用了多种技术手段来加速训练&#xff0c;包括模型并行…

【百度面试算法题】2024-08-02

部门项目实际上也涉及到多种语言&#xff0c;有没有意愿去学习其他语言&#xff1f;你是如何利用数据结构来做技术的/项目中是如何解决高并发的&#xff1f;&#xff08;没听懂问题…就直接开始介绍项目了…后来被打断说不进行发散了&#xff0c;开始问八股&#xff09;说一下单…

Visual Studio中gets报错解决方法

1、报错内容 2、visual studio 2015之后就不支持gets了&#xff0c;变成了gets_s&#xff0c;并且后面的括号中也不能单独写一个数组名&#xff0c;还需加上数组内的个数&#xff0c;如下&#xff1a; 问题就解决了

虚拟机如何使用pxe服务实现自动安装系统

一、前提 服务机为rhel7.9 因为我们需要虚拟机为服务器来给要安装系统的虚拟机分配IP 所以要先将VMWare的NAT模式的DHCP自动分配取消&#xff0c;如图&#xff1a; yum install httpd -y systemctl enable --now httpd 二、基于HTTP协议的PXE服务器 1、首先需要进入图形化…

2-55 基于matlab的 永磁同步电机滑膜观测器估算电机转速

基于matlab的 永磁同步电机滑膜观测器估算电机转速。精度比传统观测器精度高。分别输出电机转速估计值与实际值、电机转速估计误差、电机转子位置估计值与实际值、电机转子位置估计误差。程序已调通&#xff0c;可直接运行。 2-55滑膜观测器估算电机转速 - 小红书 (xiaohongsh…

正点原子imx6ull-mini-Linux驱动之Linux SPI 驱动实验(22)

跟上一章一样&#xff0c;其实这些设备驱动&#xff0c;无非就是传感器对应寄存器的读写。而这个读写是建立在各种通信协议上的&#xff0c;比如上一章的i2c&#xff0c;我们做了什么呢&#xff0c;就是把设备注册成一个i2c平台驱动&#xff0c;这个i2c驱动怎么搞的呢&#xff…

PXE:Kickstart自动化安装Linux系统

PXE&#xff1a;工作在 Client/Server模式&#xff0c;允许客户机通过网络从远程服务器下载引导镜像&#xff0c;并加载安装文件或者整个操作系统。 运行 PXE协议需要设置&#xff1a;DHCP服务器和TFTP服务器。DHCP服务器用来给 PXE client&#xff08;将要安装系统的主机&…

在使用JSON过程中遇到的一个空间释放问题

在对完成的模块进行空间访问检查中发现了这个问题&#xff0c;这刚开始接触JSON的使用&#xff0c;也不知道他的内部实现&#xff0c;因此该问题找了好久&#xff0c;终于发现是每个节点创建都会自动开辟空间&#xff0c;因此造成空间未成功释放的错误。 JSON未成功替换节点空间…

NVIDIA A100 和 H100 硬件架构学习

目前位置NV各种架构代号&#xff1a; NVIDIA GPU 有多个代号和架构&#xff0c;这些架构对应不同的世代和硬件特性。以下是 NVIDIA 主要 GPU 架构及其计算能力&#xff08;Compute Capability&#xff09;代号的简要概述&#xff1a; Tesla 架构 G80、GT200 Compute Capabi…

未授权访问漏洞(漏洞复现合集)

目录 一&#xff1a;Redis未授权访问漏洞 * 步骤一:进入vulhub目录使用以下命令启动靶机... 步骤二:在Kali上安装redis程序进行服务的链接 步骤三:可以直接连接执行命令且不需要认证说明存在未授权访问漏洞...下载以下攻击项目... 步骤四:使用工具执行以下命令获取目标的命…

LeetCode.572.另一棵树的子树

题目描述&#xff1a; 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。…

E24.【C语言】练习:求一个整数存储在内存中的二进制中1的个数(两种方法)

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {int n 0;int sum 0;scanf("%d", &n);while (n!0){if (n % 2 1)sum;n n / 2;}printf("%d", sum); } 代码可以更简洁 while (n!0)直接写成while (n) 对于正整数&#xff1…

探索Python文档自动化的奥秘:MkDocs的神奇之旅

文章目录 **探索Python文档自动化的奥秘&#xff1a;MkDocs的神奇之旅**第一部分&#xff1a;背景为什么选择MkDocs&#xff1f; 第二部分&#xff1a;MkDocs是什么&#xff1f;MkDocs&#xff1a;文档生成的瑞士军刀 第三部分&#xff1a;如何安装MkDocs&#xff1f;一键安装&…

C++中的宏

文章目录 第一个简单宏示例宏定义可包括分号宏定义符号正常使用案例Debug版本和release版本的宏定义使用定义宏开关为某个数值而不仅仅是定义【注意】预处理定义规范代码折叠反斜杠实现多行宏的书写 第一个简单宏示例 发生在编译的预处理阶段。 不建议下面这么写&#xff0c;下…

3.9.转置卷积

转置卷积 ​ 目前为止&#xff0c;在卷积神经网络层中&#xff0c;通常会减少下采样输入图像的空间维度&#xff08;高和宽)。然而如果输入和输出图像的空间维度相同&#xff0c;在以像素级分类的语义分割中将会很方便&#xff1a;输出像素所处的通道维可以保有输入像素在同一…

Linux应用编程——实现SPI通信(基于百问网6ULL开发板)

1.SPI简介 SPI 通常指串行外设接口&#xff08;Serial Peripheral Interface&#xff09;&#xff0c;它是一种高速、全双工、同步的通信总线。 SPI 总线在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;也为 PCB 的布局节省了空间。这四根线分别是&…

大模型学习笔记 - InstructGPT中的微调与对齐

LLM 微调 之 InstructGPT中的微调与对齐 LLM 微调 之 InstructGPT中的微调与对齐 技术概览 InstructGPT中的微调与对齐 大体步骤标注数据量模型训练 1. SFT 是如何训练的2. Reward Model是如何训练的3. RLHF 是如何训练的具体讲解RLHF 的loss 函数 模型效果参考链接&#xf…

数据结构实验报告-图

桂 林 理 工 大 学 实 验 报 告 一、实验名称&#xff1a; 实验7 图 二、实验内容&#xff1a; 1.已知一个有向图的顶点集V和边集E分别为:V (0,1,2,3,4,5,6,7,8};E{<0,2>&#xff0c;<1,3>,<1,4>,<2,4>,<2,5>,<3,6>,<3,7>.&l…