面试经典150题【61-70】

news2024/11/20 7:17:28

文章目录

  • 面试经典150题【61-70】
    • 61.旋转链表
    • 86.分隔链表
    • 104. 二叉树的最大深度
    • 100.相同的树
    • 226.翻转二叉树
    • 101.对称二叉树
    • 105.从前序与中序遍历序列构造二叉树
    • 106.从后序和中序遍历序列构造二叉树
    • 117.填充每个节点的下一个右侧节点指针II
    • 114.二叉树展开为链表

面试经典150题【61-70】

61.旋转链表

在这里插入图片描述

本质是调换这俩
在这里插入图片描述
第一步:成环。第二步:找head, 第三步:断环
在这里插入图片描述

class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if(head == null|| k == 0)  return head;
        int n = 0;			   //链表的长度
        ListNode tail = null;  //尾节点
        for(ListNode p = head; p != null ; p = p.next){
            tail = p;
            n++;
        }
        k %= n;
        ListNode p = head;
        for(int i = 0; i < n - k - 1; i++)  p = p.next;   //找到链表的第n-k个节点
        tail.next = head;
        head = p.next;
        p.next = null;
        return head;  //返回新的头节点
    }
}

86.分隔链表

在这里插入图片描述
新建两个链表,一个里面的值恒小于x,一个里面的值恒大于等于x,再合并两个链表即可。

class Solution {
    public ListNode partition(ListNode head, int x) {
        // 新建两个链表
        ListNode smlDummy = new ListNode(0), bigDummy = new ListNode(0);
        // 遍历链表
        ListNode sml = smlDummy, big = bigDummy;
        while (head != null) {
            // 将 < x 的节点加入 sml 节点后
            if (head.val < x) {
                sml.next = head;
                sml = sml.next;
            // 将 >= x 的节点加入 big 节点后
            } else {
                big.next = head;
                big = big.next;
            }
            head = head.next;
        }
        // 拼接两链表
        sml.next = bigDummy.next;
        big.next = null;
        return smlDummy.next;
    }
}

104. 二叉树的最大深度

在这里插入图片描述
树的问题最经典的就是DFS和BFS。
DFS:
在这里插入图片描述

class Solution {
    public int maxDepth(TreeNode root) {
        if(root == null) return 0;
        return Math.max(maxDepth(root.left),maxDepth(root.right)) +1;
    }
}

BFS就是创建一个队列,一行一行遍历。看看能遍历几行罢了。

100.相同的树

树这里就是递归去做就行。

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p==null &&q==null) return true;
        //只有一个为Null ,那肯定不一样
        if(p==null) return false;
        if(q==null) return false;
        //比较值和左右子树
        return p.val==q.val && isSameTree(p.left,q.left) && isSameTree(p.right,q.right);

    }
}

226.翻转二叉树

在这里插入图片描述
树这边还是用递归,先处理自己的逻辑,然后直接扔给左右子节点。

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root == null) return null;
        TreeNode temp=root.left;
        root.left=root.right;
        root.right=temp;
        invertTree(root.left);
        invertTree(root.right);
        return root;

    }
}

101.对称二叉树

在这里插入图片描述
永远是最左边的和最右边的想比较,然后往里面靠近。

class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root==null) return true;
        return compare(root.left, root.right);

    }
    public boolean compare(TreeNode left,TreeNode right){
        if(left==null && right==null) return true;
        if(left ==null && right!=null) return false;
        if(left!=null && right==null) return false;
        if(left.val==right.val){
            boolean b1=compare(left.left,right.right);
            boolean b2=compare(right.left,left.right);
            return b1&&b2;
        }
        return false;
    }
}

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

在这里插入图片描述
根据preorder[0]去切开Inorder数组,并且得知数量后,再行切开preorder数组,最后迭代即可。

class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        if(preorder.length == 0) return null;
        TreeNode root=new TreeNode(preorder[0]);
        int i=0;
        for(int j=0;j<inorder.length;j++){
            if(inorder[j]==preorder[0]) i=j;
        }
        int[] inorder1=Arrays.copyOfRange(inorder,0,i);
        int[] inorder2=Arrays.copyOfRange(inorder,i+1,inorder.length);
        int[] preorder1=Arrays.copyOfRange(preorder,1,1+i);
        int[] preorder2=Arrays.copyOfRange(preorder,1+i,preorder.length);
        root.left=buildTree(preorder1,inorder1);
        root.right=buildTree(preorder2,inorder2);
        return root;

    }
}

106.从后序和中序遍历序列构造二叉树

在这里插入图片描述

class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        if(postorder.length == 0) return null;
        TreeNode root=new TreeNode(postorder[postorder.length-1]);
        int i=0;
        for(int j=0;j<inorder.length;j++){
            if(inorder[j]==postorder[postorder.length-1]) i=j;
        }
        int[] inorder1=Arrays.copyOfRange(inorder,0,i);
        int[] inorder2=Arrays.copyOfRange(inorder,i+1,inorder.length);
        int[] postorder1=Arrays.copyOfRange(postorder,0,i);
        int[] postorder2=Arrays.copyOfRange(postorder,i,postorder.length-1);
        root.left=buildTree(inorder1,postorder1);
        root.right=buildTree(inorder2,postorder2);
        return root;

    }
}

117.填充每个节点的下一个右侧节点指针II

在这里插入图片描述
用个BFS就行了

class Solution {
     public Node connect(Node root){
         if(root==null) return null;
        LinkedList<Node> queue=new LinkedList<>();
        queue.addLast(root);
        while(!queue.isEmpty()){
            Node temp=null;
            Node pre=null;
            int queueSize= queue.size();
            for(int i=0;i<queueSize;i++){
                temp=queue.pollFirst();
                if(pre !=null) pre.next=temp;
                pre =temp;
                if(temp.left!=null) queue.addLast(temp.left);
                if(temp.right!=null) queue.addLast(temp.right);
                
            }
            temp.next=null;
            
        }
        return root;
    }
}

114.二叉树展开为链表

在这里插入图片描述
直接先序遍历放到数组里,然后挨个取出来建立新树即可。

class Solution {
 public void flatten(TreeNode root) {
        List<TreeNode> list = new ArrayList<TreeNode>();
        preorderTraversal(root, list);
        int size = list.size();
        for (int i = 1; i < size; i++) {
            TreeNode prev = list.get(i - 1), curr = list.get(i);
            prev.left = null;
            prev.right = curr;
        }
    }

    public void preorderTraversal(TreeNode root, List<TreeNode> list) {
        if (root != null) {
            list.add(root);
            preorderTraversal(root.left, list);
            preorderTraversal(root.right, list);
        }
    }
}

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

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

相关文章

修复 因 fstab 中UUID 错误导致系统无法正常工作的问题

操作系统&#xff1a; PVE 8.0 /debian 12 &#xff08;bookworm&#xff09; 问题症状&#xff1a;可以正常启动进入系统&#xff0c;但是系统盘以只读方式挂载 问题原因&#xff1a;/etc/fstab 中引导区的UUID 被错误修改导致 解决方法&#xff1a; 重启系统&#xff0c;在…

QT:用opencv的KNN识别图片中的LED数字(一)

前言 一款功能测试的软件demo,使用了QT作为界面,主要使用了opencv的KNN识别,使用gstreamer作为管道,用来打开图片。后期会写一篇打开摄像头实时识别的文章。 (正在写,未完成,稍候) 效果一预览: 效果二预览: 效果三预览: 正在写。。。 设计思路 1. 软件UI设…

吴恩达深度学习笔记:深度学习引言1.1-1.5

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第一周&#xff1a;深度学习引言(Introduction to Deep Learning)1.1 欢迎(Welcome)1.2 什么是神经网络&#xff1f;(What is a Neural Network)1.3 神经网络的监督学习(Supervised Learning …

【C++】C++模板基础知识篇

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 泛型编程2. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 3. 类模板3.1 类模板的定义格式3.2 类模板的实例化…

Trans论文复现:考虑源荷不平衡性的微电网鲁棒定价方法程序代码!

适用平台&#xff1a;MatlabYalmipCplex/Gurobi 程序针对目前微电网中高比例新能源发电的波动性和间歇性&#xff0c;提出了考虑源荷不平衡特性的微电网鲁棒定价方法&#xff0c;综合考虑电力市场边际收益和边际成本&#xff0c;利用价格波动来平衡电源和负荷。程序算例丰富、注…

腾讯云轻量 2核2G4M新用户首购活动,99续费同价来了!!

阿里云199一年续费同价&#xff0c;腾讯云99一年续费同价&#xff0c;平台卷起来&#xff0c;对用户的角度来说&#xff0c;真的是香麻了~ 腾讯云新春采购节&#xff0c;2核2G4兆的基础配置&#xff0c;新官方直接放大招&#xff0c;99一年&#xff0c;活动期间内&#xff0c;…

EXSI create datastore

文章目录 1. 简介2. 清空磁盘3. 删除表4. 创建database 1. 简介 在 ESXi 环境中创建数据存储(Datastore)的步骤如下: 登录 vSphere Web Client 打开 Web 浏览器,输入 ESXi 主机或 vCenter Server 的 IP 地址,使用有权限的账户登录。 在 ESXi 环境中创建数据存储(Datastore)…

二、TensorFlow结构分析(4)

TF数据流图图与TensorBoard会话张量Tensor变量OP高级API 目录 1、变量 2、高级API 1、变量 2、高级API

【Kafka系列 07】Kafka 如何保证消息不丢失

一、Kafka 消息不丢失的边界 一直以来&#xff0c;很多人对于 Kafka 丢失消息这件事情都有着自己的理解&#xff0c;因而也就有着自己的解决之道。在讨论具体的应对方法之前&#xff0c;我觉得我们首先要明确&#xff0c;在 Kafka 的世界里什么才算是消息丢失&#xff0c;或者…

华为云开年采购季Web及移动App上云体验,助力软件行业创新发展

随着云化、智能化浪潮的进一步深入&#xff0c;越来越多的应用软件开发商选择将核心产品从本地IDC机房搬迁到公有云上。但同时&#xff0c;软件开发商们也非常在意公有云厂商的可靠性与安全性&#xff0c;希望能够选择一家更加稳定可靠的云服务商&#xff0c;确保自身业务的连续…

02极简LLM逻辑与PyTorch快速入门

文章目录 02极简LLM逻辑与PyTorch快速入门极简LLM逻辑PyTorch环境安装&#xff08;重要&#xff0c;不难&#xff09;PyTorch 主要概念Tensors张量张量常见的形式&#xff1a;scalar、vector、matrix、n-dimensinal张量初始化张量参数&#xff1a;shape、datatype、device张量运…

从huggingface下载模型像本地加载但是UnicodeDecodeError

我自己是在Linux下出现了这个问题 原文&#xff1a;https://github.com/huggingface/transformers/issues/13674 The path for the AutoModel should be to a directory pointing to a pytorch_model.bin and to a config.json. Since you’re pointing to the .bin file dire…

论文笔记:Efficient Bootstrapping for Confidential Transactions

EcoBoost: Efficient Bootstrapping for Confidential Transactions 设计了一种被称为EcoBoost的新方法&#xff0c;以提高支持机密交易的区块链的引导效率。具体来说&#xff0c;利用随机抽样来验证高概率保密交易的正确性。因此&#xff0c;与事务数量相比**&#xff0c;验证…

Promise async await

简介&#xff1a;回调 JS会提供很多函数&#xff0c;允许异步行为。换句话说&#xff0c;现在开始执行的行为。但它们会在稍后完成。异步执行某项功能的函数应该提供一个 callback 参数用于在相应事件完成时调用。处理Error&#xff1a; 加载成功时&#xff0c;它会调用 callb…

Z Potentials | 星爵,他的征途不止向量数据库

纵观过去几十年的科技发展史&#xff0c;每一代新的技术架构的出现往往都伴随着新的数据范式的出现&#xff0c;也催生了多家百亿到千亿美金数据平台的诞生。如果说 2023 年科技领域的关键词是 LLM&#xff0c;那么数据库领域的关键词一定非向量数据库莫属。向量数据库是一种专…

我们是如何测试人工智能产品的

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术已经成为我们生活中不可或缺的一部分。然而&#xff0c;要构建出可信赖的AI系统并非易事。这需要我们不仅深入理解人工智能的核心原理&#xff0c;还需要将这些理论知识应用到实际场景中。 为了帮助大家系…

一个不错的空间视频收集论坛

该网站收录了来自世界各地的空间视频、空间照片和全景照片,以突出令人惊叹的 Apple Vision Pro 的功能。 网站地址:

Java 客户端向服务端上传文件(TCP通信)

一、实验内容 编写一个客户端向服务端上传文件的程序&#xff0c;要求使用TCP通信的的知识&#xff0c;完成将本地机器输入的路径下的文件上传到D盘中名称为upload的文件夹中。并把客户端的IP地址加上count标识作为上传后文件的文件名&#xff0c;即IP&#xff08;count&#…

mysql中insert … select锁范围

1、执行 insert … select 的时候&#xff0c;对目标表也不是锁全表&#xff0c;而是只锁住需要访问的资源。 例如&#xff0c; CREATE TABLE t (id int(11) NOT NULL AUTO_INCREMENT,c int(11) DEFAULT NULL,d int(11) DEFAULT NULL,PRIMARY KEY (id),UNIQUE KEY c (c) ) EN…

IP定位技术在金融风控中的应用研究

随着金融科技的快速发展&#xff0c;金融行业的风险也呈现出多样化、复杂化的特点。金融风控作为保障金融安全的重要手段&#xff0c;其面临的挑战也日益加剧。在这样的背景下&#xff0c;IP定位技术作为一种先进的信息技术手段&#xff0c;正逐渐成为金融风控领域的重要工具。…