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.hqwc.cn/news/506070.html

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

相关文章

代码随想录day11(1)字符串:反转字符串中的单词 (leetcode151)

题目要求&#xff1a;给定一个字符串&#xff0c;将其中单词顺序反转&#xff0c;且每个单词之间有且仅有一个空格。 思路&#xff1a;因为本题没有限制空间复杂度&#xff0c;所以首先想到的是用split直接分割单词&#xff0c;然后将单词倒叙相加。 但如果想让空间复杂度为O…

内存的检测与排查

内存&#x1f40e;的检测与排查 文章目录 内存&#x1f40e;的检测与排查查杀Java Web filter型内存马0x01 内存马简历史0x02 查杀思路0x03 内存马的识别0x04 内存马的查杀 查杀Java Web filter型内存马 0x01 内存马简历史 其实内存马由来已久&#xff0c;早在17年n1nty师傅的…

一文解决Onlyfans年龄验证问题(小白必看)

前言&#xff1a;很多用户在 OnlyFans 添加信用卡时&#xff0c;出现了年龄验证问题导致操作失败。出现这个问题的原因一是用国内邮箱注册了&#xff0c;二是绑卡时的 IP 有问题&#xff0c;会导致年龄验证、无法支付 OnlyFans 等问题。下面是一些逐步验证的步骤&#xff0c;供…

2、事件机制、DOM操作、jquery对尺寸操作、jquery添加和删除

一、事件机制 1、事件源.事件类型(事件处理程序) $(this)中的this不能加引号 $(#box).click(function () {$(this).css(background-color,blue)//点击颜色变为蓝色 })2、事件源.on/bind(事件类型&#xff0c;事件处理程序) $("#box").on(dbclick,function () {$(…

什么是Vue指令?请列举一些常见的Vue指令以及它们的用法

Vue.js 是一款流行的前端框架&#xff0c;它的指令&#xff08;Directives&#xff09;是 Vue.js 提供的一种特殊属性&#xff0c;用于在模板中对 DOM 元素进行直接操作。指令通常是以 v- 开头的特殊属性&#xff0c;用于响应式地将数据绑定到 DOM 元素上。 在 Vue 中&#xf…

#WEB前端

1.实验&#xff1a;vscode安装&#xff0c;及HTML常用文本标签 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; &#xff08;1&#xff09;网页直接搜索安装vscode &#xff08;2&#xff09;打开vscode&#xff0c;在下图分别安装以下插件&#xff1a; Html Css Support …

机器学习:模型选择和模型优化

进行数据处理之后&#xff0c;我们得到了x_train和y_train&#xff0c;我们就可以用来进行回归或分类模型训练啦~ 一、模型选择 我们这里可能使用的是回归模型&#xff08;Regression&#xff09;&#xff0c;值得注意的是&#xff0c;回归和分类不分家。分类是预测离散值&…

【leetcode】用队列实现栈

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 点击查看题目 思路: 在做此题之前&#xff0c;我们先要实现队列&#xff0c;这在上个博客中已经写过&#…

浅析 explicit 关键字

浅析 explicit 关键字 文章目录 浅析 explicit 关键字前言案例剖析补充案例总结 前言 ​ C 提供了多种方式来实现类型转换和构造对象&#xff0c;然而&#xff0c;有时候这些方式会导致一些意想不到的结果&#xff0c;比如隐式转换和复制初始化。为了避免这些潜在的问题&#…

【兔子机器人】根据自身机器人参数修改simulink模型

关节电机 机体初始高度 &#xff01;&#xff01;&#xff01;接下来尝试修改各腿的坐标朝向

黑马JavaWeb开发跟学(三)Web前端开发Vue-Element

黑马JavaWeb开发跟学三.Web前端开发Vue-Element 1 Ajax1.1 Ajax介绍1.1.1 Ajax概述1.1.2 Ajax作用1.1.3 同步异步 1.2 原生Ajax1.3 Axios1.3.1 Axios的基本使用1.3.2 Axios快速入门1.3.3 请求方法的别名1.3.4 案例 2 前后台分离开发2.1 前后台分离开发介绍2.2 YAPI2.2.1 YAPI介…

解决Java并发问题的常见思路

写在文章开头 近期对一些比较老的项目进行代码走查&#xff0c;碰到一些极端的并发编程恶习&#xff0c;所以笔者就基于此文演示这类问题以及面对并发编程时我们应该需要了解一些常见套路。 Hi&#xff0c;我是sharkChili&#xff0c;是个不断在硬核技术上作死的java coder&am…