wy的leetcode刷题记录_Day46

news2024/11/16 5:51:41

wy的leetcode刷题记录_Day46

声明

本文章的所有题目信息都来源于leetcode
如有侵权请联系我删掉!
时间:2022-11-19

前言


目录

  • wy的leetcode刷题记录_Day46
    • 声明
    • 前言
    • 1732. 找到最高海拔
      • 题目介绍
      • 思路
      • 代码
      • 收获
    • 106. 从中序与后序遍历序列构造二叉树
      • 题目介绍
      • 思路
      • 代码
      • 收获

1732. 找到最高海拔

今天的每日一题是:1732. 找到最高海拔

题目介绍

有一个自行车手打算进行一场公路骑行,这条路线总共由 n + 1 个不同海拔的点组成。自行车手从海拔为 0 的点 0 开始骑行。

给你一个长度为 n 的整数数组 gain ,其中 gain[i] 是点 i 和点 i + 1 的 净海拔高度差(0 <= i < n)。请你返回 最高点的海拔 。

示例 1:
输入:gain = [-5,1,5,0,-7]
输出:1
解释:海拔高度依次为 [0,-5,-4,1,1,-6] 。最高海拔为1 。

示例 2:
输入:gain = [-4,-3,-2,-1,4,3,2]
输出:0
解释:海拔高度依次为[0,-4,-7,-9,-10,-6,-3,-1] 。最高海拔为 0 。

思路

方法一:贪心算法+模拟:
题目给出的数组为高度差,那么我们遍历这个高度差然后从海拔0开始叠加每一次迭代得到当前的海拔高度,维护一个最高海拔遍历就可以了。(一次遍历+一个变量)
方法二:前缀和:
遍历题目的高度差数组,将其变为前缀和,这样就得到了每一处的海拔高度,然后寻找其中的最大值就可以了。(这样好像还是复杂一些)(俩次遍历+无额外空间)

代码

贪心模拟:

class Solution {
public:
    int largestAltitude(vector<int>& gain) {
        int ans = 0, sum = 0;
        for (int x: gain) {
            sum += x;
            ans = max(ans, sum);
        }
        return ans;
    }
};

前缀和:

class Solution {
public:
    int largestAltitude(vector<int>& gain) {
        int n=gain.size();
        for(int i=1;i<n;i++)
        {
            gain[i]+=gain[i-1];
        }
        return max(*max_element(gain.begin(),gain.end()),0); 
    }
};

收获

很简单的一题没有什么收获说实话,手速题吧。

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

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

题目介绍

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。

示例 1:
在这里插入图片描述
输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
输出:[3,9,20,null,null,15,7]

示例 2:
输入:inorder = [-1], postorder = [-1]
输出:[-1]

思路

首先我们知道中序遍历的顺序是左中右,后续遍历的顺序是左右中。并且在后序遍历序列中的最后一个元素就是根节点,我们根据此根节点在中序遍历序列中同样找到根节点。并且又知在中序遍历序列中的根节点左边的节点就是左子树,右边的节点就是右子树。所以依次我们根据这个序列将树分为俩颗子树,再将中序遍历序列和后续遍历序列分别切割为中序左遍历序列、中序右遍历序列、后续左遍历序列、后续右遍历序列,这样递归,直到只剩一个节点的时候就是叶子节点,以此来构建树。

代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        if(inorder.size()==0||postorder.size()==0)
            return nullptr;
        return travel(inorder,postorder);
    }
    
    TreeNode* travel(vector<int>& inorder, vector<int>& postorder)
    {
        if(postorder.size()==0)
            return nullptr;
        //寻找分割点 后续数组的最后一个
        int rootVal=postorder[postorder.size()-1];
        TreeNode* root=new TreeNode(rootVal);
        
        if(postorder.size()==1)
            return root;
        
        //寻找中序遍历的切割点
        int SplitIndex=0;
        for(;SplitIndex<inorder.size();SplitIndex++)
        {
            if(inorder[SplitIndex]==rootVal)
                break;
        }
        //切割中序数组
        vector<int> leftInorder(inorder.begin(),inorder.begin()+SplitIndex);
        vector<int> RightInorder(inorder.begin()+SplitIndex+1,inorder.end());//跳过该root节点

        //舍弃后续数组的最后一个元素
        postorder.resize(postorder.size()-1);

        //切割后续数组 只要求长度与中序数组切割后的一致就ok
        vector<int> leftPostorder(postorder.begin(),postorder.begin()+SplitIndex);
        vector<int> RightPostorder(postorder.begin()+SplitIndex,postorder.end());//之前舍弃节点的时候跳过该root节点
        root->left=travel(leftInorder,leftPostorder);
        root->right=travel(RightInorder,RightPostorder);
        return root;
        

        

    }
};

收获

巩固了二叉树的中后续遍历,并以此为基础反向追踪构建出树。得出了中后续遍历的序列的一些特点:后续遍历序列的最后一个节点是根节点,中序遍历中的根节点位于中序遍历序列的中间(非正中间),中序遍历中的根节点的左边是其左子树的所有节点组成,右边是其右子树的所有节点组成。

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

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

相关文章

【Java毕设】基于SpringBoot实现新冠疫情统计系统(Idea+Navicat)

推荐学习专栏&#xff1a; Java基础学习专栏&#xff1a;java基础知识学习Java进阶学习专栏&#xff1a;java编程进阶学习 前言 疫情在我们的生活中反反复复&#xff0c;为了方便我们更直观的清楚新冠疫情数据&#xff0c;通过Java编程可以统计疫情信息&#xff0c;更好管控。…

CSC公派|在读博士赴新加坡南洋理工大学联合培养

我们先助O同学取得了英国牛津大学的邀请函&#xff0c;并成功获批CSC项目。由于该校办理T5签证所需的COS担保证书迟迟未果&#xff0c;考虑到其毕业及CSC延期时限&#xff0c;我们又为O同学申请到新加坡南洋理工大学&#xff0c;顺利改派并签证出国。 O同学背景&#xff1a; 申…

【数据库09】数据库系统体系结构

前 言 &#x1f349; 作者简介&#xff1a;半旧518&#xff0c;长跑型选手&#xff0c;立志坚持写10年博客&#xff0c;专注于java后端 ☕专栏简介&#xff1a;相当硬核&#xff0c;黑皮书《数据库系统概念》读书笔记&#xff0c;讲解&#xff1a; 1.数据库系统的基本概念(数据…

WPF之MVVM模式

1.MVVM模式 MVVM即模型-视图-视图模型 &#xff0c;是用于解耦 UI 代码和非 UI 代码的 设计模式。 借助 MVVM&#xff0c;可以在 XAML 中以声明方式定义 UI&#xff0c;将 UI使用数据绑定标到包含数据和命令的其他层。 数据绑定提供数据和结构的松散耦合&#xff0c;使 UI 和链…

内联函数详解

文章目录前言正文知识点一&#xff1a;内联1、内联函数的诞生2、内联函数概念3、内联函数的特性结语前言 这里vince将要进入C的学习了&#xff0c;C学习将是一个漫长的过程&#xff0c;当然在学习这里的基础上前面的知识也不能不复习。也有很多人说C有多难有多难的&#xff0c…

零代码—0代码—无代码平台是什么?怎么选?

那么&#xff0c;零代码平台究竟是什么&#xff1f;我们该是不是优先选择呢&#xff1f;为方便大家理解&#xff0c;本文将从零代码平台的原因、特点、优势、应用实例、局限性、选择要点六个角度分析&#xff1a;零代码平台到底是什么&#xff1f;到底适不适合你来用&#xff1…

Java理清JDK、JRE、JVM之间什么关系?如何做到一次编译到处执行的?

在理解Java基础知识或者有一定编程基础后&#xff0c;看此文章会深有体会。 JDK、JRE、JVM之间什么关系 包含关系 开发环境&#xff08;jdk&#xff09;,执行环境&#xff08;jre&#xff09; 源程序通过Javac编译成字节码文件 这个字节码文件是可以被各个操作系统通用的文…

【Nginx】在Linux上如何安装Nginx教程+Nginx基本命令的使用

目录1. Nginx下载2. 系统准备3. Nginx安装3.1 安装方式3.2 依赖准备1&#xff09;GCC编译器2&#xff09;PCRE3&#xff09;zlib4&#xff09;OpenSSL3.3 源码下载3.4 解压编译3.5 Nginx目录结构3.6 配置环境变量4. Nginx基本命令4.1 检查配置文件的正确性4.2 查看Nginx配置文件…

qt example plugandpaint 插件 动态库 pnp_extrafiltersd.dll无法加载问题

使用版本windows qt5.12.0vs2015编译器。 运行plugandpaint工程的时候发现pnp_extrafiltersd.dll在load的时候失败了&#xff0c;经过调试&#xff0c;发现qlibrary.cpp中的findPatternUnloaded()的qt_find_pattern()无法通过。&#xff08;release 版的pnp_extrafilters.dll是…

Java基础深化和提高 ---- 网络编程

网络编程基本概念 计算机网络 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其 外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软 件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计 算机系统。 …

Linux系统下文件的压缩与打包

压缩和解压缩 压缩数据或者解压数据&#xff1a; 为什么要移出数据信息前面的 / 目录 -P --absolute-paths 不要从文件名中去除 /1 compress和uncompress 格式 compress Options [file ...]常用选项 -d 解压缩&#xff0c;相当于uncompress-c 结果输出至标准输出…

Spring 事务失效的场景

1、private、final、static 方法 被 Transactional 注解标注的方法的访问权限必须是 public&#xff1b; 被 Transactional 注解标注的方法不能被 final、static 修饰&#xff0c;被标注的方法必须是可覆盖的。这是因为事务底层使用的是 aop&#xff0c;而 aop 使用的是代理模…

嵌入式为何钟爱SourceInsight,主要因为这个功能~

已剪辑自: https://mp.weixin.qq.com/s/F-gafwbZswpnY8EaCz8HxQ 不管是玩单片机还是嵌入式linux&#xff0c;只要是与硬件结合比较紧密的部分目前基本上还是C语言&#xff0c;当然了&#xff0c;不知道以后C语言会不会被取代&#xff0c;即便哪天被某种更加优秀的语言取代&…

m基于matlab的MIMO信道容量分析,对比了不同天线数量;非码本预编码SVD,GMD;码本预编码DFT,TxAA以及空间分集

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 MIMO信道容量 平均功率分配的MIMO信道容量&#xff1a;通过Matlab仿真在加性高斯白噪声情况下的SISO (1*1)、SIMO(1*6)、MISO(4*1)、MIMO(3*3)、MIMO&#xff08;4*4&#xff09;系统的…

VMware Explore 2022 China,赋能中国企业加速实现云智能

全球领先的企业软件创新者VMware&#xff08;NYSE: VMW&#xff09;的年度技术盛会—— VMware Explore 2022 China于11月8日正式举行。本届大会以“探索多云宇宙”为主题&#xff0c;汇聚云计算领域的顶尖技术专家和创新者&#xff0c;通过150多场解决方案演讲、围绕云基础架构…

[附源码]Python计算机毕业设计超市团购平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

JuiceFS 使用效果及注意事项

以某线上集群为例&#xff0c;数据规模&#xff1a;每天写入 5TB&#xff0c;数据储存 30 天&#xff0c;热数据储存一周&#xff0c;节点数量&#xff1a;5 个热节点&#xff0c;15 个冷节点。 采用 JuiceFS 后&#xff0c;热节点保持不变&#xff0c;冷节点从 15 个降到了 1…

[b01lers2020]Life on Mars (难发现的sql注入)

[b01lers2020]Life on Mars 打开界面以后&#xff0c;查看各种都没有提示&#xff0c;果断扫描目录&#xff0c;但也是没获得什么。 到这里只能burp抓个包看看 抓包两个界面发现了get传参&#xff0c;考虑是否存在sql注入 尝试额以后发现只返回了一个1&#xff0c;试一下别的引…

Nginx显示500错误原因和解决方法

文章目录1.背景2.Nginx 常见的几种报错3. 解决500错误1.背景 最近在操作nginx 的时候出现了 Nginx 500 内部错误&#xff0c;在此记录一下原因&#xff0c;项目采用的是前后端分离方式&#xff0c;后端SpringBoot &#xff0c;前端是Vue 部署到Nginx 下。 2.Nginx 常见的几种…

从水质监测运维工程师转行软件测试,武汉校区小哥哥除了收获10k高薪,还有...

从大学步入社会&#xff0c;每个人都会面临角色和身份的转变&#xff0c;大部分同学对此充满信心和期待&#xff0c;仿佛有用不完的精力、耗不尽的热情。可是社会中的磨砺也让心态慢慢变得成熟&#xff0c;生活、文化等方面的落差显现出来&#xff0c;想要做出改变&#xff0c;…