wy的leetcode刷题记录_Day80

wy的leetcode刷题记录_Day80

声明

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

前言

目录

  • wy的leetcode刷题记录_Day80
    • 声明
    • 前言
    • 2368. 受限条件下可到达节点的数目
      • 题目介绍
      • 思路
      • 代码
      • 收获
    • 92. 反转链表 II
      • 题目介绍
      • 思路
      • 代码
      • 收获

2368. 受限条件下可到达节点的数目

今天的每日一题是:2368. 受限条件下可到达节点的数目

题目介绍

现有一棵由 n 个节点组成的无向树,节点编号从 0 到 n - 1 ,共有 n - 1 条边。

给你一个二维整数数组 edges ,长度为 n - 1 ,其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数数组 restricted 表示 受限 节点。

在不访问受限节点的前提下,返回你可以从节点 0 到达的 最多 节点数目。

注意,节点 0 不 会标记为受限节点。

示例 1:在这里插入图片描述

输入:n = 7, edges = [[0,1],[1,2],[3,1],[4,0],[0,5],[5,6]], restricted = [4,5]
输出:4
解释:上图所示正是这棵树。 在不访问受限节点的前提下,只有节点 [0,1,2,3] 可以从节点 0 到达。

示例 2:
在这里插入图片描述
输入:n = 7, edges = [[0,1],[0,2],[0,5],[0,4],[3,2],[6,5]], restricted = [4,2,1]
输出:3
解释:上图所示正是这棵树。 在不访问受限节点的前提下,只有节点 [0,5,6] 可以从节点 0 到达。

思路

DFS:按照题目要求进行模拟进行树上DFS,根据题目提供的节点数目及边的位置构建邻接表,然后dfs遍历整个邻接表,遍历到不可抵达的节点时结束dfs。其中有细节就是dfs邻接表时可能会出现1->2->1这种死循环情况,除了本身树成环的情况我们只需要在dfs基础上加一个变量记录上一次遍历的节点以此判断是否进入死循环即可。

代码

class Solution {
public:int reachableNodes(int n, vector<vector<int>>& edges, vector<int>& restricted) {vector<vector<int>> LinkList(n);//邻接表vector<int> is_restricted(n);int ans=0;for(auto x:restricted){is_restricted[x]=1;}LinkList.resize(n);for(auto v:edges){LinkList[v[0]].push_back(v[1]);LinkList[v[1]].push_back(v[0]);}function<void(int,int)> dfs = [&](int x,int f){ans++;for(auto y:LinkList[x]){if(y != f && !is_restricted[y]){dfs(y,x);}}};dfs(0,-1);// int ans=dfs(0);return ans;}
};

收获

树上DFS配合邻接表。

92. 反转链表 II

92. 反转链表 II

题目介绍

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

示例 1:
在这里插入图片描述
输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]

示例 2:

输入:head = [5], left = 1, right = 1
输出:[5]

思路

其实就是反转链表的衍生题目,将链表中的子链表进行反转,思路很简单但是做法比较麻烦。首先我们将这个子链表找到,将整个链表切分为了三部分:首部,反转部,尾部。将反转部反转后重新与首部尾部进行连接即可。细节就是在切分三部分的时候我们需要确定四个节点的位置:反转部首部节点和其上一个节点,反转部尾部节点和其下一个节点,记住切分一定得把反转部完全切出来要置首部的尾节点和尾部的首节点为空,否则调用反转的时候会导致整个后半部分全部反转。其次就是left为1可能会导致数组上溢,因此采用哑节点来解决。

代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:void reverserList(ListNode *head){ListNode* pre=nullptr;ListNode* cur=head;while(cur){ListNode* nexxt=cur->next;cur->next=pre;pre=cur;cur=nexxt;}}ListNode* reverseBetween(ListNode* head, int left, int right) {ListNode* dom=new ListNode(0,head);ListNode* leftHeadpre=dom;ListNode* rightTailnext=nullptr;ListNode* leftHead=nullptr;ListNode* rightTail=nullptr;//定点head=dom;for(int i=0;i<left-1;i++){head=head->next;}leftHeadpre=head;for(int i=0;i<right-left+1;i++){head=head->next;}rightTail=head;leftHead=leftHeadpre->next;rightTailnext=rightTail->next;//切断leftHeadpre->next=nullptr;rightTail->next=nullptr;reverserList(leftHead);//反转//连接leftHeadpre->next=rightTail;leftHead->next=rightTailnext;return dom->next;}
};

收获

在链表中哑节点真好用!!!!

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

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

相关文章

Redis持久化+Redis内存管理和优化+Redis三大缓存问题

Redis持久化Redis内存管理和优化Redis三大缓存问题一、Redis高可用二、Redis持久化1、RDB持久化1.1 触发条件(1) 手动触发(2) 自动触发(3) 其他自动触发机制 1.2 执行流程1.3 启动时加载 2、AOF持久化2.1 开启AOF2.2 执行流程(1) 命令追加(append)(2) 文件写入(write)和文件同步…

读书笔记-三国演义-荆州争夺

荆州争夺 赤壁之战后&#xff0c;荆州成为蜀汉、曹魏和孙吴三方争夺的焦点。刘备、曹操和孙权相继占据荆州&#xff0c;展开了一系列激烈的军事冲突和政治斗争。 赤壁之战后的荆州争夺是三国时期曹操、刘备和孙权之间的一场激烈竞争&#xff0c;是继赤壁之战后三方势力之间的…

网络编程笔记

网络编程 1.网络编程常用工具 1.扫描器 每一个网络编程者手中都有一两个用得顺手的扫描器&#xff0c;扫描器在一个老练的网络编程者手里有着相当大的作用。利用扫描器&#xff0c;网络编程者可以对某一网段的机器或是某台目标机器进行快速漏洞扫描&#xff0c;因为传统的手…

langchain学习笔记(十)

Bind runtime args | &#x1f99c;️&#x1f517; Langchain 1、有时&#xff0c;我们希望使用常量参数调用Runnable序列中的Runnable&#xff0c;这些参数不是序列中前一个Runnable的输出的一部分&#xff0c;也不是用户的输入&#xff0c;这时可以用Runnable.bind() from …

关于synchronized介绍

synchronized的特性 1. 乐观锁/悲观锁自适应,开始时是乐观锁,如果锁冲突频繁,就转换为悲观锁 2.轻量级/重量级锁自适应 开始是轻量级锁实现,如果锁被持有的时间较长,就转换成重量级锁 3.自旋/挂起等待锁自适应 4.不是读写锁 5.非公平锁 6,可重入锁 synchronized的使用 1&#…

2024家用洗地机品牌推荐!洗地机选什么牌子好?建议选择这几款

如今生活节奏加快&#xff0c;工作繁忙的上班族很少有时间做家务。即使抽出时间打扫&#xff0c;也难以保持家庭长久干净整洁。许多人听说了智能化家居神器——洗地机&#xff0c;想要入手一台。但在市场上各种洗地机层出不穷&#xff0c;很多人不知如何选择。下面是我给大家整…

掌握MyBatis:轻松解锁数据库操作的艺术

MyBatis是一款优秀的持久层框架&#xff0c;它封装了JDBC操作的很多繁琐细节&#xff0c;提供了一种相对简便的操作数据库的方法。MyBatis通过XML描述接口绑定的SQL语句&#xff0c;以及通过Java注解的方式&#xff0c;将Java对象与数据库表进行映射&#xff0c;从而简化了数据…

降低85%的gc发生率:ES的GC调优实践!

#大数据/ES #经验 #性能 ES的服务日志出现一些gc overhead现象&#xff0c;经过调优对比&#xff0c;gc发生率显著下降了85%&#xff0c;分享参数如下&#xff1a; ES的G1GC参数&#xff08;多实例&#xff09; -XX:UseG1GC -XX:MaxGCPauseMillis200 -XX:InitiatingHeapOccu…

Redis缓存双写一致性之更新策略

文章目录 1. 经典面试题2. 双写一致性3. 更新策略4. canal简介5. Redis与Mysql数据双写一致性工程落地案例 1. 经典面试题 上面的业务逻辑你用java代码如何实现&#xff1f;你只要用缓存&#xff0c;就可能会涉及到redis缓存与数据库双存储双写&#xff0c;你只要是双写&#x…

嵌入式学习day29 指针复习

1.指针&#xff1a; 1.提供一种间接访问数据的方法 2.空间没有名字,只有一个地址编号 2.指针: 1.地址:区分不同内存空间的编号 2.指针:指针就是地址,地址就是指针 3.指针变量:存放指针的变量称为指针变量,简称为指针 3.指针的定义: int *p NULL; …

MyBatis中 #{} 和 ${} 区别

Mybatis的Mapper映射文件中&#xff0c;有两种方式可以引用形参变量进行取值: #{} 和 ${}。本文将简述两种方式的区别和适用场景 取值引用 #{} 方式 #{}: 解析为SQL时&#xff0c;会将形参变量的值取出&#xff0c;并自动给其添加引号。 例如&#xff1a;当实参username&quo…

AI 笔记助手,你的思路整理助手

大家好&#xff0c;今天给大家介绍一款非常实用的 AI 笔记助手——AI Note。这款助手就像是一个贴心的小助手&#xff0c;能帮助我们整理笔记&#xff0c;提高学习和工作效率。 &#x1f916; AI Note 可以智能总结笔记内容&#xff0c;准确标记重点&#xff0c;让我们更快地获…

final关键字有什么作用

final关键字在Java中用于声明变量、方法和类&#xff0c;表示它们的值或行为不能被修改。 被 final 修饰的类不可以被继承 被 final 修饰的方法不可以被重写 被 final 修饰的变量不可变&#xff0c;被 final 修饰的变量必须被显式第指定初始值&#xff0c;还得注意的是&#…

学习助手:借助AI大模型,学习更高效!

在当今的数字时代&#xff0c;人工智能&#xff08;AI&#xff09;的崛起已经彻底改变了我们获取信息、处理数据以及学习新知识的方式。AI大模型&#xff0c;特别是如OpenAI开发的GPT-4这类先进的技术&#xff0c;已成为学习和教育领域的一大助力。本文旨在探索如何借助AI大模型…

了解 SYN Flood 攻击

文章目录&#xff1a; 什么是 SYN Flood 攻击&#xff1f;对网络的影响SYN Flood 发生的迹象如何解决&#xff1f; 什么是 SYN Flood 攻击&#xff1f; SYN Flood&#xff08;SYN 洪水攻击&#xff09;是一种常见的分布式拒绝服务&#xff08;DDoS - Distributed Denial of Se…

购买腾讯云服务器请先领取代金券,2024腾讯云优惠

腾讯云优惠代金券领取入口共三个渠道&#xff0c;腾讯云新用户和老用户均可领取8888元代金券&#xff0c;可用于云服务器等产品购买、续费和升级使用&#xff0c;阿腾云atengyun.com整理腾讯云优惠券&#xff08;代金券&#xff09;领取入口、代金券查询、优惠券兑换码使用方法…

FL Studio选购指南:新手小白应该选择哪个版本FL Studio?

很多打算入手正版FL Studio的新手朋友都会纠结一个问题&#xff1a;哪个版本的FL Studio更适合我&#xff0c;到底应该入手哪一款FL Studio&#xff1f;本文会介绍每个版本之间的差异点&#xff0c;并带大家选择适合自己的FL Sudio版本。 FL Studio全版本 在选购前有一些小知识…

UE5常见问题处理笔记

一、C工程中的文件出现很多头文件找不到&#xff0c;比如&#xff1a;#include CoreMinimal.h文件提示找不到。 解决方法&#xff1a;在UE编辑器中选择菜单Tools -> Refresh Visual Studio Project。 二、莫名其妙的编译错误。 解决方法&#xff0c;找到工程根目录下的Bi…

GO流程控制

1. if else 在Go语言中&#xff0c;关键字if是用于测试某个条件&#xff08;布尔型或逻辑型&#xff09;的语句&#xff0c;如果该条件成立&#xff0c;则会执行 if 后由大括号{}括起来的代码块&#xff0c;否则就忽略该代码块继续执行后续的代码。 if condition {// 条件为真…

qwen.cpp

1、Release模式 git clone --recursive https://github.com/QwenLM/qwen.cpp && cd qwen.cpp git submodule update --init --recursive python3 qwen_cpp/convert.py -i /mnt/workspace/qwen.cpp/Qianwen/qwen/Qwen-7B-Chat -t q4_0 -o qwen7b-ggml.bincmake -B buil…