wy的leetcode刷题记录_Day71

wy的leetcode刷题记录_Day71

声明

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

前言

目录

  • wy的leetcode刷题记录_Day71
    • 声明
    • 前言
    • 2487. 从链表中移除节点
      • 题目介绍
      • 思路
      • 代码
      • 收获
    • 509. 斐波那契数
      • 题目介绍
      • 思路
      • 代码
      • 收获

2487. 从链表中移除节点

今天的每日一题是:2487. 从链表中移除节点

题目介绍

给你一个链表的头节点 head 。

移除每个右侧有一个更大数值的节点。

返回修改后链表的头节点 head 。

示例 1:
在这里插入图片描述> 输入:head = [5,2,13,3,8]
输出:[13,8]
解释:需要移除的节点是 5 ,2 和 3 。> - 节点 13 在节点 5 右侧。

  • 节点 13 在节点 2 右侧。
  • 节点 8 在节点 3 右侧。

示例 2:
输入:head = [1,1,1,1]
输出:[1,1,1,1]
解释:每个节点的值都是 1 ,所以没有需要移除的节点。

思路

方法一:暴力解:通过两重嵌套循环来寻找新链表,具体如下:1.每一轮循环寻找当前链表的最大值将最大值加入新链表2.每一轮循环从上一次循环寻找到的加入新链表的节点开始遍历。(超时,时间复杂度n的2次方)
方法二:换个思路:本题其实应该在考察寻找出链表中的右往左找非递减序列 可以从序列尾部开始遍历,俩种做法递归或者模拟栈。
方法三:延续方法二的思路,这次我们不使用栈而是直接将链表反转来进行操作最后将符合条件的条件在进行一次反转即可。
部分思路参考作者:力扣官方题解

代码

方法一:暴力

/*** 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:ListNode* removeNodes(ListNode* head) {int maxVal=0;ListNode* maxValPointer=nullptr;ListNode* newHeader=nullptr;ListNode* temp=nullptr;int count=0;while(head){count++;maxVal=0;maxValPointer=nullptr;while(head){if(head->val>maxVal){maxVal=head->val;maxValPointer=head;}head=head->next;}head=maxValPointer->next;//下一次遍历从新节点开始if(count==1)//如果是头节点则创建新链表{newHeader=maxValPointer;temp=newHeader;newHeader->next=nullptr;}else//如果是尾节点则加入新链表{temp->next=maxValPointer;temp=temp->next;temp->next=nullptr;}}return newHeader;}
};

方法二:递归

class Solution {
public:ListNode* removeNodes(ListNode* head) {if (head == nullptr) {return nullptr;}head->next = removeNodes(head->next);if (head->next != nullptr && head->val < head->next->val) {return head->next;} else {return head;}}
};

模拟栈

/*** 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:ListNode* removeNodes(ListNode* head) {//换个思路:本题其实应该在考察寻找出链表中的右往左找非递减序列 可以从序列尾部开始遍历stack<ListNode* > stk;for(;head!=nullptr;head=head->next){stk.push(head);}while(!stk.empty()){if(head==nullptr||stk.top()->val>=head->val){stk.top()->next=head;head=stk.top();}stk.pop();}return head;}
};

方法三:反转链表:

class Solution {
public:ListNode *reverse(ListNode *head) {ListNode dummy;while (head != nullptr) {ListNode *p = head;head = head->next;p->next = dummy.next;dummy.next = p;}return dummy.next;}ListNode* removeNodes(ListNode* head) {head = reverse(head);for (ListNode *p = head; p->next != nullptr; ) {if (p->val > p->next->val) {p->next = p->next->next;} else {p = p->next;}}return reverse(head);}
};

收获

通过暴力模拟提高了解题的速度,手速题秒杀!后续的对时间复杂度的改进是通过对题目的深度解读,发现了另一种思路,转换思路之后得出了一种更为简洁的解法以及时间优化度更高的方法,通过模拟栈和递归俩种写法加深的对函数调用的理解。

509. 斐波那契数

动态规划基础篇之——509. 斐波那契数

题目介绍

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1

给定 n ,请计算 F(n) 。

示例 1:

输入:n = 2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1

示例 2:

输入:n = 3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2

示例 3:

输入:n = 4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3

思路

同之前的爬楼梯那一题十分相似都可以采用对应的递归方法或者递推方法以及矩阵快速幂…

代码

递归:

class Solution {
public:int fib(int n) {if(n==0||n==1)return n;return fib(n-1)+fib(n-2);}
};

递推:

class Solution {
public:int fib(int n) {int a=0;int b=1;int c=a+b;for(int i=2;i<=n;i++){c=a+b;a=b;b=c;}return c;}
};

矩阵快速幂:

class Solution {
public://矩阵乘法vector<vector<int>> martix_mutiply(vector<vector<int>> &a,vector<vector<int>>& b){vector<vector<int>> c{{0,0},{0,0}};for(int i=0;i<2;i++){for(int j=0;j<2;j++){c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j];}}return c;}//快速幂vector<vector<int>> martix_rapid_pow(vector<vector<int>> &a,int n){vector<vector<int>> ret{{1,0},{0,1}};while(n>0){if(n&1){ret=martix_mutiply(ret,a);}n>>=1;a=martix_mutiply(a,a);}return ret;}int fib(int n) {//矩阵快速幂if (n < 2) {return n;}vector<vector<int>> q{{1, 1}, {1, 0}};vector<vector<int>> res = martix_rapid_pow(q, n - 1);return res[0][0];}};

收获

巩固矩阵快速幂!

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

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

相关文章

低压浪涌保护防雷器的应用方案

浪涌是指电力系统中出现的瞬时过电压或过电流&#xff0c;它们的持续时间很短&#xff0c;但幅值很高&#xff0c;可能达到几千伏或几千安。浪涌的主要来源有两种&#xff1a;一是雷电冲击&#xff0c;二是电力系统的切换操作。浪涌会对电气设备造成严重的损坏&#xff0c;甚至…

跨境电商源码技术大揭秘:9个最常见的问题及解决方案

跨境电商发展迅猛&#xff0c;源码技术成为关键。作为跨境电商源码领域的专家&#xff0c;我将向大家揭秘9个最常见的问题及解决方案&#xff0c;帮助您更好地应对挑战&#xff0c;实现技术优化。 问题一&#xff1a;跨境电商源码性能瓶颈如何解决&#xff1f; 跨境电商源码性…

【数据库原理】(7)关系数据库的完整性约束

关系模型的完整性规则是为了确保数据的唯一性和数据之间的关系的准确性。 有三类完整性约束:实体完整性、参照完整性和用户定义完整性。 其中实体完整性和参照完整性是必须满足的完整性约束条件,应该由关系系统自动支持。 实体完整性 实体完整性的核心概念 唯一性&#xf…

陪诊系统|北京陪诊小程序提升陪诊服务效果

随着科技的不断发展&#xff0c;人们对于医疗服务的需求也越来越高。在过去&#xff0c;陪诊师和陪诊公司通常需要通过电话或传真等传统方式与医院进行沟通和安排。然而&#xff0c;现在有了陪诊小程序&#xff0c;这些问题得到了解决。本文将介绍陪诊小程序的开发流程和功能&a…

【python高级用法】线程

前言 Python通过标准库的 threading 模块来管理线程。这个模块提供了很多不错的特性&#xff0c;让线程变得无比简单。实际上&#xff0c;线程模块提供了几种同时运行的机制&#xff0c;实现起来非常简单。 线程模块 线程对象Lock对象RLock对象信号对象条件对象事件对象 简单…

Java学习——设计模式——介绍

文章目录 设计模式介绍UML的类图表示类与类之间关系的表示关联关系聚合关系组合关系依赖关系继承关系实现关系 设计模式介绍 设计模式design patterns&#xff0c;指在软件设计中&#xff0c;被反复使用的一种代码设计经验。使用设计模式的目的是为了可重用代码&#xff0c;提…

纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想)

纯前端上传word,xlsx,ppt,在前端预览并下载成图片&#xff08;预览效果可以&#xff0c;下载图片效果不太理想&#xff09; 一.安装依赖二、主要代码 预览效果链接: https://github.com/501351981/vue-office 插件文档链接: https://501351981.github.io/vue-office/examples/d…

pth.tar的保存和读取

一、简介 在PyTorch中&#xff0c;.pt、.pth和.pth.tar都是保存训练好的模型的文件格式。主要区别在于&#xff1a; .pt是PyTorch1.6及以上版本中引入的保存格式&#xff0c;可以保存整个模型&#xff0c;包括模型结构、模型参数以及优化器状态等信息&#xff0c;是一个二进制文…

【C++入门到精通】function包装器 | bind() 函数 C++11 [ C++入门 ]

阅读导航 引言一、function包装器1. 概念2. 基本使用3. 逆波兰表达式求值&#xff08;1&#xff09;普通写法&#xff08;2&#xff09;使用包装器以后的写法 二、bind() 函数温馨提示 引言 很高兴再次与大家分享关于 C11 的一些知识。在上一篇文章中&#xff0c;我们讲解了 c…

【Linux系统编程二十六】:线程控制与线程特性(Linux中线程库/线程创建/线程退出/线程等待)

【Linux系统编程二十六】&#xff1a;线程控制与线程特性 一.Linux线程库pthread1.线程控制块2.线程tid3.线程栈 二.线程控制1.线程创建2.线程退出3.线程等待 三.线程的特性1.独立栈2.局部存储3.线程可分离 一.Linux线程库pthread 在Linux中&#xff0c;是没有明确的线程概念的…

19个地信专业可以投的岗位汇总【GIS求职秘籍】

今天给大家详细科普一下&#xff0c;GIS专业的同学毕业以后还能从事哪些岗位的工作。 &#xff08;这期不包含学校老师等事业编岗位&#xff09; 一、GIS数据采集和处理 GIS数据采集和处理在这里分为一个大类&#xff0c;包含前期测绘外业的实地采集&#xff0c;后续的数据加…

石化行业设备管理系统的作用

石化行业是全球经济中不可或缺的重要组成部分&#xff0c;它涵盖了石油、天然气、化工等领域。在这个高风险和高安全要求的行业中&#xff0c;设备的可靠性和安全性至关重要。为了有效管理和维护设备&#xff0c;石化公司越来越多地采用设备管理系统&#xff0c;以提高生产效率…

MongoDB—SQL到MongoDB映射图表

一、术语和概念 下表显示了各种 SQL 术语和概念 以及相应的 MongoDB 术语和概念。 SQL Terms/Concepts MongoDB Terms/Concepts database database table collection row document or BSON document column field index index table joins $lookup, embedded docu…

CSS 伪类函数 :is() 和 :where()

在编写 CSS 时&#xff0c;有时可能会使用很长的选择器列表来定位具有相同样式规则的多个元素。例如&#xff0c;如果您想对标题中的 b 标签进行颜色调整&#xff0c;我们应该都写过这样的代码&#xff1a; h1 > b, h2 > b, h3 > b, h4 > b, h5 > b, h6 > b…

不想root,但想远程控制vivo手机?这个方法不用root也能做到

远程控制vivo手机不用root&#xff01;今天给大家讲讲免Root情况下&#xff0c;笔记本电脑如何远程控制vivo手机。 在电脑和手机都安装AirDroid&#xff0c;这是免Root的关键。 下载AirDroid个人版 | 远程控制安卓手机软件下载下载AirDroid个人版进行文件传输和管理、远程控制安…

八、HTML 链接

一、HTML 链接 HTML 使用超级链接与网络上的另一个文档相连。 HTML中的链接是一种用于在不同网页之间导航的元素。 链接通常用于将一个网页与另一个网页或资源&#xff08;如文档、图像、音频文件等&#xff09;相关联。 链接允许用户在浏览网页时单击文本或图像来跳转到其…

Python进程、线程、协程:多任务并发编程指南

概要 在当今计算机时代&#xff0c;为了提高程序的性能和响应速度&#xff0c;多任务并发编程成为了一种必不可少的技术手段。而Python作为一门高级编程语言&#xff0c;提供了多种多任务并发编程的方式&#xff0c;包括进程、线程和协程。本文将详细介绍这三种方式的使用教程…

Unity 打包AB 场景烘培信息丢失

场景打包成 AB 资源的时候&#xff0c;Unity 不会打包一些自带相关的资源 解决办法&#xff1a;在 Project settings > Graphics下设置&#xff08;Automatic 修改成 Custom&#xff09;

基于web的电影院购票系统

**&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;**一 、设计说明 1.1选题动因 …

cnPuTTY 0.80.0.1—PuTTY Release 0.80中文版本简单说明~~

2023-12-18 官方发布了PuTTY 0.80本次发布主要是针对Terrapin攻击(CVE-2023-48795)的修改发布。 更多详细的内容请查看PuTTY Change Log。 有关Terrapin攻击可用简单参考&#xff1a;警告&#xff01;&#xff01;&#xff01;Terrapin攻击(CVE-2023-48795)~~~ 为了缓解此漏洞…