wy的leetcode刷题记录_Day51

news2024/11/23 1:13:39

wy的leetcode刷题记录_Day51

声明

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

前言

目录

  • wy的leetcode刷题记录_Day51
    • 声明
    • 前言
    • 795. 区间子数组个数
      • 题目介绍
      • 思路
      • 代码
      • 收获
    • 98. 验证二叉搜索树
      • 题目介绍
      • 思路
      • 代码
      • 收获

795. 区间子数组个数

今天的每日一题是:795. 区间子数组个数

题目介绍

给你一个整数数组 nums 和两个整数:left 及 right 。找出 nums 中连续、非空且其中最大元素在范围 [left, right] 内的子数组,并返回满足条件的子数组的个数。

生成的测试用例保证结果符合 32-bit 整数范围。

示例 1:
输入:nums = [2,1,4,3], left = 2, right = 3
输出:3
解释:满足条件的三个子数组:[2], [2, 1], [3]

示例 2:
输入:nums = [2,9,2,5,6], left = 2, right = 8
输出:7

思路

方法一:双指针法:首先我们将数组中的数分为三部分:1.小于left;2.大于等于left并且小于等于right;3.大于right这三种,为了满足题意我们的子数组必须满足不存在3的情况下至少有一个情况2。我们遍历整个数组以此时的位置为右边界,每当出现情况2时我们更新一个变量last_1,该变量表示上一个情况2出现的位置,每当出现情况3时我们更新一个变量last_2并且将last_1置为-1(因为在last_2左边的数都不满足条件了),该变量表示上一个情况3出现的位置。当没有情况2 出现的时候说明此时以i为右边界的情况中不存在满足条件的情况,继续拓展右边界。当有情况2,无情况3的时候,说明左边界可以在[0,i]中任选。当有情况2,有情况3的时候,说明我们只能在[last_1,last_2]之间选择左边界才能满足条件。
方法二(来自题解):计数法:根据方法一的结论,我们求出子数组必须满足不存在3的情况下至少有一个情况2的个数。所以,我们可以先求出只包含 0 或 1 的子区间数目,再减去只包括 0 的子区间数目。我们使用了一个辅助函数用来计算数组 nums 中所有元素小于等于 lower 的子数组数目。

代码

双指针法:

class Solution {
public:
    int numSubarrayBoundedMax(vector<int>& nums, int left, int right) {
        int n=nums.size();
        int ans=0;
        for(int i=0;i<n;i++)
        {
            if(nums[i]<left)
                nums[i]=0;
            else if(nums[i]>=left&&nums[i]<=right)
                nums[i]=1;
            else if(nums[i]>right)
                nums[i]=2;
        }
        int last_1=-1;
        int last_2=-1;
        for(int i=0;i<n;i++)
        {
            if(nums[i]==1)
                last_1=i;
            else if(nums[i]==2)
            {
                last_1=-1;
                last_2=i;
            }

            if(last_1!=-1)
                ans+=last_1-last_2;
        }
        return ans;
    }
};

计数法:

class Solution {
public:
    int numSubarrayBoundedMax(vector<int>& nums, int left, int right) {
        return count(nums, right) - count(nums, left - 1);
    }

    int count(vector<int>& nums, int lower) {
        int res = 0, cur = 0;
        for (auto x : nums) {
            cur = x <= lower ? cur + 1 : 0;
            res += cur;
        }
        return res;
    }
};


收获

简单的模拟题,需要考虑一些情况,但没有特别复杂的情况

98. 验证二叉搜索树

98. 验证二叉搜索树

题目介绍

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

示例 1:
在这里插入图片描述
输入:root = [2,1,3]
输出:true

示例 2:
在这里插入图片描述
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

思路

根据搜索树的性质,我们通过中序遍历的方法得到一个数组,这个数组在基于搜索树的性质上一定是一个严格升序数组,所以我们基于此判定即可,同理可写出递归和递推。

代码

递归:

/**
 * 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:
    vector<int> arr;
    bool isValidBST(TreeNode* root) {
        travel(root);
        int n=arr.size();
        for(int i=1;i<n;i++)
        {
            if(arr[i]<=arr[i-1])
                return false;
        }
        return true;
    }
    void travel(TreeNode* root)
    {
        if(root==nullptr)
            return;
        travel(root->left);
        arr.push_back(root->val);
        travel(root->right);
    }
};

递推:

class Solution {
public:
    bool isValidBST(TreeNode* root) {
        stack<TreeNode*> stack;
        long long inorder = (long long)INT_MIN - 1;

        while (!stack.empty() || root != nullptr) {
            while (root != nullptr) {
                stack.push(root);
                root = root -> left;
            }
            root = stack.top();
            stack.pop();
            // 如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树
            if (root -> val <= inorder) {
                return false;
            }
            inorder = root -> val;
            root = root -> right;
        }
        return true;
    }
};

收获

巩固了搜索树和中序遍历的知识

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

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

相关文章

Linux中修改环境变量的几种方法比较分析

修改环境变量的作用 使得命令可以在命令行直接运行 第一种方式&#xff0c;在终端直接使用export **特点&#xff1a;**即可生效&#xff0c;无需重启或刷新文件&#xff1b;终端关闭则失效 第二种方式&#xff0c;修改/etc/profile文件 特点&#xff1a;对所有用户永久有…

算法刷题打卡第29天:省份数量---并查集

省份数量 难度&#xff1a;中等 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间接相连。 省份 是一组直接或间接相连的城市&#xff0c;组内不…

SQL注入漏洞 | iwebsec

文章目录靶场搭建SQL注入漏洞靶场搭建 配置 云服务器&#xff1a;阿里云 系统&#xff1a;CentOS 7.6 靶场&#xff1a;iwebsec CentOS-7.6安装docker 安装iwebsec 启动靶场 docker run --restartalways --name iwebsec -it -dp 8001:80 iwebsec/iwebsec访问不成功 可能是…

希望流程挖掘成为撬动企服市场的突破口 | 专访凡得科技CEO海广跃、首席技术顾问刘聪

2022年&#xff0c;全球流程挖掘市场规模预计将达70多亿人民币&#xff0c;而目前中国流程挖掘行业尚处于市场启蒙期&#xff0c;仅少数大型企业与机构对流程挖掘进行了初步或尝试性的投入。从目前来看&#xff0c;原生流程挖掘厂商会直接面向客户输出流程挖掘能力&#xff0c;…

Spring集合注入

一、环境准备 创建一个Maven项目pom.xml添加Spring依赖resources下添加spring的配置文件applicationContext.xml项目中添加BookDao、BookDaoImpl类 public interface BookDao {public void save(); }public class BookDaoImpl implements BookDao {private int[] array;priva…

容器云平台初始化(harbor的安装部署)

1.虚拟机规划 设备说明主机名接口IP地址虚拟机1MasterEth010.0.0.10/24虚拟机2Node1Eth010.0.0.20/24虚拟机3HarborEth010.0.0.30/24 2.容器云平台初始化(harbor的安装部署) 1.根据规划的IP地址&#xff0c;创建虚拟机&#xff0c;确保网络正常通信。按照规划表修改主机名并关…

Linux-ACL权限

ACL权限简介 ACL&#xff1a;access control list 允许给任何用户或者用户组设置任何文件或者目录的访问权限 查看Linux是否开启ACL dumpe2fs Linux一般都开启了ACL权限&#xff0c;可以使用下面的命令查看分区的ACL权限是否打开 首先可以使用df -h或者lsblk来查看Linux系统…

JioNLP上的那些好用的冷门工具

大家好&#xff0c;JioNLP(https://github.com/dongrixinyu/JioNLP)目前已经在Github上有了1600星的点赞&#xff0c;下载安装量大概有几万了。 被使用最多的功能&#xff0c;也是被问得最多的&#xff0c;主要是关键短语抽取、时间语义解析、地址按省市县三级解析等等。其它功…

程序员迷茫:30岁以上的“大龄程码农”出路在哪?java码农该怎么办?

程序员生存、成功、制胜的法则源自IT精英的职业发展秘诀热爱工作&#xff0c;享受生活 为什么程序员过了30就不行了&#xff1f; 我们被固定在“敲代码”的坑里&#xff0c;一干就是10年&#xff0c;再干别的早已不会。敲代码已经成了一项流水线般的工作&#xff0c;就像搬砖工…

Postman非GUI运行脚本工具Newman的安装简介

一、Newman简介 Newman是为Postman而生&#xff0c; 专门用来运行Postman编写好的脚本&#xff1b;使用Newman&#xff0c; 你可以很方便的用命令行来执行postman collections 二、Newman安装 1.先下载Node.js https://nodejs.org/zh-cn/download/ 根据自己电脑系统及位数…

数字验证学习笔记——SystemVerilog芯片验证12 ——句柄的使用包的使用

一、句柄的使用 句柄可以作为形式参数通过方法来完成对象指针的传递&#xff0c;从外部传入方法内部。 句柄也可以在方法内部首先完成修改&#xff0c;而后再由外部完成使用 最后会报错&#xff0c;因为create&#xff08;t&#xff09;定义的是function&#xff0c;没有返回…

锁机制之 Condition 接口

1. 前言 本节内容主要是对 Java 锁机制之 Condition 接口进行讲解&#xff0c;Condition 接口是配合 Lock 接口使用的&#xff0c;我们已经学习过 Lock 接口的相关知识&#xff0c;那么接下来对 Condition 接口进行讲解。本节内容的知识点如下&#xff1a; 2. Condition 接口…

cookie、localStorage 和sessionStorage

文章目录Cookie1.什么是 Cookie&#xff1f;2.cookie的工作机制&#xff0c;运作流程cookie属性项3.读取cookie4.修改cookie5.删除cookielocalStorage 和sessionStorage1.生存期2.数据结构3.API 不管是 localStorage&#xff0c;还是 sessionStorage&#xff0c;可使用的API都相…

基于FPGA+MPU+MCU全自动血细胞分析仪解决方案

全自动血细胞分析仪是医院临床检验应用非常广泛的仪器之一&#xff0c;用来检测红细胞、血红蛋白、白细胞、血小板等项目。是基于电子技术和自动化技术的全自动智能设备&#xff0c;功能齐全&#xff0c;操作简单&#xff0c;依托相关计算机系统在数据处理和数据分析等方面具有…

蓝牙学习三(GAP)

1.简介 GAP&#xff08;Generic Access Profile-通用访问配置文件&#xff09;与应用层紧密相连&#xff0c;所以要想了解BLE&#xff0c;GAP是必须认识的东西。 在第一章中我们说过GAP层&#xff0c;GAP层目前主要用来进行广播、扫描和发起连接。GAP保证了不同的BLE设备可以互…

深度学习入门(7)误差反向传播计算方式及简单计算层的实现

在上一节中《深度学习入门&#xff08;6&#xff09;误差反向传播基础---计算图与链式法则》&#xff0c;我们介绍了误差反向传播的计算图与导数计算的链式法则&#xff0c;这一节主要介绍计算图中各计算节点的误差反向传播计算方式&#xff0c;以及加法与乘法层的实现。 目录…

Scala系列-4、scala中特质、柯里化、闭包等

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 传送门&#xff1a;大数据系列文章目录 目录scala中特质特质作为接口使用特质中放置非抽象的成员特质的模板操作特质的混入对象操作特质的执行链…

T31开发笔记: 使用FTP上传下载文件

若该文为原创文章&#xff0c;转载请注明原文出处 一、前言 最段时间&#xff0c;在开发IPC时&#xff0c;突然想到把录制好的MP4文件上传到服务器&#xff0c;考虑了一些方法&#xff0c;感觉用TFP方式比较好&#xff0c;可以下载和上传文件&#xff0c;只需要搭建一个简单的…

【Mybatis编程:修改数据(动态SQL)】

目录 1. 在AlbumMapper.java中添加抽象方法 2. 在AlbumMapper.xml中配置SQL 3. 在AlbumMapperTests.java中编写并执行测试 1. 在AlbumMapper.java中添加抽象方法 在AlbumMapper.java中添加抽象方法&#xff1a; /** * 修改相册数据 * * param album 封装了被修改的相册的…

【Mybatis编程:批量插入相册(动态SQL)】

目录 1. 书写SQL语句 2. 在AlbumMapper.java中添加抽象方法 3. 在AlbumMapper.xml中配置SQL 4. 在AlbumMapperTests.java中编写并执行测试 1. 书写SQL语句 需要执行的SQL语句大致是&#xff1a; insert into pms_album (name, description, sort) values (?,?,?), (?…