wy的leetcode刷题记录_Day79

wy的leetcode刷题记录_Day79

声明

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

前言

目录

  • wy的leetcode刷题记录_Day79
    • 声明
    • 前言
    • 2369. 检查数组是否存在有效划分
      • 题目介绍
      • 思路
      • 代码
      • 收获
    • 61. 旋转链表
      • 题目介绍
      • 思路
      • 代码
      • 收获
    • 82. 删除排序链表中的重复元素 II
      • 题目介绍
      • 思路
      • 代码
      • 收获
    • 86. 分隔链表
      • 题目介绍
      • 思路
      • 代码
      • 收获

2369. 检查数组是否存在有效划分

今天的每日一题是:2369. 检查数组是否存在有效划分

题目介绍

给你一个下标从 0 开始的整数数组 nums ,你必须将数组划分为一个或多个 连续 子数组。

如果获得的这些子数组中每个都能满足下述条件 之一 ,则可以称其为数组的一种 有效 划分:

  • 1.子数组 恰 由 2 个相等元素组成,例如,子数组 [2,2] 。
  • 2.子数组 恰 由 3 个相等元素组成,例如,子数组 [4,4,4] 。
  • 3.子数组 恰 由 3 个连续递增元素组成,并且相邻元素之间的差值为 1 。例如,子数组 [3,4,5] ,但是子数组 [1,3,5] 不符合要求。
    如果数组 至少 存在一种有效划分,返回 true ,否则,返回 false 。

示例 1:
输入:nums = [4,4,4,5,6]
输出:true
解释:数组可以划分成子数组 [4,4] 和 [4,5,6] 。这是一种有效划分,所以返回 true 。

示例 2:
输入:nums = [1,1,1,2]
输出:false
解释:该数组不存在有效划分。

思路

动态规划,令数组的长度为n,它至少存在一个有效的划分取决于它的子状态:

  • 1.前(n-2)个元素存在有效的划分,并且后俩个元素相等
  • 2.前(n-2)3个元素存在有效的划分,并且后三个元素相等或者后三个元素呈递增

于是我们使用一个数组dp[n+1]来记录前n个元素是否存在有效划分。初始化全为false,dp[0]为true。状态转移方程为

 bool euqal=(nums[i-1]==nums[i-2])&(nums[i-1]==nums[i-3]);//判断相等bool continuous=(nums[i-1]-nums[i-2]==1)&(nums[i-2]-nums[i-3]==1);//判断递增dp[i]=(dp[i-2]&(nums[i-2]==nums[i-1]))||(dp[i-3]&&(euqal||continuous));

代码

class Solution {
public:bool validPartition(vector<int>& nums) {int n=nums.size();vector<bool> dp(n+1,false);dp[0]=true;for(int i=1;i<=n;i++){if(i>=2){dp[i]=dp[i-2]&(nums[i-2]==nums[i-1]);}if(i>=3){bool euqal=(nums[i-1]==nums[i-2])&(nums[i-1]==nums[i-3]);bool continuous=(nums[i-1]-nums[i-2]==1)&(nums[i-2]-nums[i-3]==1);dp[i]=dp[i]||(dp[i-3]&&(euqal||continuous));}}return dp[n];}
};

收获

稳固了动态规划的知识。

61. 旋转链表

61. 旋转链表

题目介绍

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

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

输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]

示例 2:
在这里插入图片描述
输入:head = [0,1,2], k = 4
输出:[2,0,1]

思路

本题其实跟博主以前做过的题有点类似,就是数组循环右移,不过换成了链表,同样也是老套路。首先我们先得到链表长度为n,然后根据k%n得到实际上所需的右移次数k(节省了多余重复的移动),然后从头遍历链表n-k-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:ListNode* rotateRight(ListNode* head, int k) {int count=0;ListNode* temp=head;ListNode* tail=nullptr;ListNode* newHead=nullptr;while(temp){if(temp->next==nullptr)tail=temp;count++;temp=temp->next;}if(count==0)return head;k=k%count;if(k==0)return head;k=count-k-1;temp=head;for(int i=0;i<k;i++){temp=temp->next;}newHead=temp->next;temp->next=nullptr;tail->next=head;return newHead;}
};

收获

82. 删除排序链表中的重复元素 II

82. 删除排序链表中的重复元素 II

题目介绍

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

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

输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]

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

输入:head = [1,1,1,2,3]
输出:[2,3]

思路

本题其实最关键的就是使用一个哑节点类似书上没有用处的头节点一样,这里称呼它为哑节点。一般用这种情况是因为第一个节点可能会被删掉。首先建立一个指向第一个节点的哑节点newHead,然后使用一个指针cur从newHead来遍历整个链表,在遍历的过程中要判断相邻的俩个节点是否相同(只需判断每一组相同数的子链表前俩个),若相同的话则记录此时节点的值,然后将链表中与这个值相同的节点全部删掉,直到出现相邻的节点值不同;若不同的话则可以将cur置于该节点上使用cur->next判断下一组子串。

代码

/*** 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* deleteDuplicates(ListNode* head) {if(!head){return head;}ListNode* newHead=new ListNode(0,head);ListNode* cur=newHead;while(cur->next&&cur->next->next){if(cur->next->val==cur->next->next->val){int x=cur->next->val;while(cur->next&&cur->next->val==x){cur->next=cur->next->next;}}else{cur=cur->next;}}return newHead->next;}
};

收获

哑节点的使用很巧妙,极大程度上的能符合我的逻辑思维且减少我的代码复杂程度。

86. 分隔链表

86. 分隔链表

题目介绍

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你应当 保留 两个分区中每个节点的初始相对位置。

示例 1:

在这里插入图片描述

输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]

示例 2:

输入:head = [2,1], x = 2
输出:[1,2]

思路

这题也巧借哑节点的思路,因为头节点不确定是否仍能保持其头节点的地位(如果他大于x那么他就不再是头节点)。这道题我们使用俩个哑节点分别存储按链表顺序分别大于x和小于x的节点,最后再将这两个链表合并即得到所需链表。

代码

/*** 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* partition(ListNode* head, int x) {ListNode* small=new ListNode(0);ListNode* large=new ListNode(0);ListNode* smallHead=small;ListNode* largeHead=large;while(head){if(head->val<x){small->next=head;small=small->next;}else{large->next=head;large=large->next;}head=head->next;}small->next=largeHead->next;large->next=nullptr;return smallHead->next;}
};

收获

巩固了哑节点的使用,对于链表类的题,其中对于首节点的处理往往都用到了哑节点的方法。

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

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

相关文章

【Vue】npm run build 打包报错:请在[.env.local]中填入key后方可使用...

报错如下 根目录添加 .env.local 文件 .env.local &#xff1a;本地运行下的配置文件 配置&#xff1a;VUE_GITHUB_USER_NAME 及 VUE_APP_SECRET_KEY 原因

【研发日记】Matlab/Simulink技能解锁(二)——在Function编辑窗口Debug

目录 前言 行断点 条件断点 前言 见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》 行断点 当Matlab Function出现异常时&#xff0c;如果能确定大致的代码段&#xff0c;就可以在相应的行上设置一个断点&#xff08;Breakpoint&#xff09;&…

Oracle 11g升级19c 后部分查询功能很慢

*Oracle 11g升级19c 后部分查询功能很慢 今天生产突然有个查询非常慢&#xff0c;日志显示执行了50秒左右&#xff0c;但是从日志中拿出SQL在PLSQL执行&#xff0c;发现用时不到1秒&#xff0c;查看SQL,怀疑是下面几种原因导致 1、使用函数不当 UNIT.UNIT_CODE LIKE CONCAT(‘…

b站小土堆pytorch学习记录——P7-P8 Tensorboard的使用

文章目录 一、前置知识1.Tensorboard是什么2.SummaryWriter3.add_scalar()4.add_image() 二、代码1.一次函数2.蚂蚁和蜜蜂图片 一、前置知识 1.Tensorboard是什么 TensorBoard 是 TensorFlow 的可视化工具&#xff0c;它允许开发者可视化模型的图&#xff08;graph&#xff0…

栈(顺序栈)实现Language C

###王道考研的学习领悟&#xff0c;个人喜好讲解清晰 何为栈&#xff1f; 定义:栈&#xff08;stack&#xff09;是只允许在一端进行插入或删除的线性表。 其重要术语&#xff1a;栈顶&#xff0c;栈底&#xff0c;空栈。 我们只需要把这个图看明白了&#xff0c;理解起来就…

electron+vue3全家桶+vite项目搭建【28】封装窗口工具类【2】窗口组,维护窗口关系

文章目录 引入实现效果思路主进程模块渲染进程模块测试效果 引入 demo项目地址 窗口工具类系列文章&#xff1a; 封装窗口工具类【1】雏形 我们思考一下窗口间的关系&#xff0c;窗口创建和销毁的一些动作&#xff0c;例如父子窗口&#xff0c;窗口组合等等&#xff0c;还有…

Prometheus(二):NodeExporter和Grafana的安装和使用

目录 1 Node Exporter安装1.1 简介1.2 安装1.3 Prometheus收集node_exporter数据 2 安装Grafana2.1 安装2.2 使用1、创建数据源2、选择模板3、模板导入 2.3 grafana创建用户1、创建用户2、验证 总结 1 Node Exporter安装 1.1 简介 node exporter是Prometheus的收集数据的组件…

GCN 翻译 - 1

ABSTRACT 我们提出了一种可扩展的在以图结构为基础的数据上的半监督学习&#xff0c;这种方法直接作用在图数据上&#xff0c;可以看做是卷积神经网络的变种。我们选择了图谱理论里面的一阶近似作为我们的卷积结构。我们的模型能够随着图的规模线性伸缩&#xff0c;并且隐藏层…

【计算机网络】五种IO模型与IO多路转接之select

文章目录 一、五种IO模型二、非阻塞IO1.fcntl2.实现函数SetNoBlock3.轮询方式读取标准输入 三、I/O多路转接之select1.初识select2.select函数原型3.socket就绪条件4.select的特点5.select缺点6.select使用案例--只读取数据的server服务器1.err.hpp2.log.hpp3.sock.hpp4.select…

面试题JS篇

目录 Js 基本数据类型有哪些Ajax 如何使用如何判断一个数据是 NaN&#xff1f;Js 中 null 与 undefined 区别闭包是什么&#xff1f;有什么特性&#xff1f;对页面会有什么影响JS中模块化的方法Js 中常见的内存泄漏什么是事件冒泡&#xff1f;如何阻止事件冒泡&#xff1f;事件…

windows server mysql 数据库停止 备份 恢复全流程操作方法

一,mysql备份 mysql最好是原工程文件备份.不需要sql查询的方式备份.安全高效. 比如,安装php与mysql组合后,我的mysql文件保存在: D:\phpstudy_pro\Extensions\MySQL5.7.26\data\dux 我只需要复制一份,保存起来就行. 二,mysql恢复 怎么恢复呢.我们一般是只恢复其中一个表,则找…

初学者如何使用QT新建一个包含UI界面的C++项目

文章目录 一、下载并安装QT51、下载安装包2、注册/登录账号3、安装qt6 二、新建QT Widget项目1、新建项目并且运行2、易错点&#xff1a;可能运行成功得到UI界面但是会报错&#xff08;原因是使用了中文路径&#xff09; 一、下载并安装QT5 1、下载安装包 进入下载网址 Windo…

MES系统在离散制造企业中的功能解析

随着信息技术的快速发展和制造业的转型升级&#xff0c;MES在离散制造企业中的作用日益凸显。MES系统不仅提高了生产效率和产品质量&#xff0c;还优化了资源配置&#xff0c;增强了企业的市场竞争力。 一、生产管理功能 MES系统能够实时监控生产现场的各种数据&#xff0c;包…

java小记(2)

IS-A&#xff1a;类的父子继承关系。 default&#xff1a;关键字&#xff0c;与Java中的public&#xff0c;private等关键字一样&#xff0c;都属于修饰符关键字&#xff0c;可以用来修饰属性、方法以及类&#xff0c;但是default一般用来修饰接口中的方法。 接口与抽象类的区…

WSL2部署RV1126 SDK编译环境

1 下载RV1126 SDK 在 Firefly | 让科技更简单&#xff0c;让生活更智能 下载REPO_SDK 这里将SDK下载到了F:\SDK 2 解压SDK到WSL2 tar -xvf /mnt/f/SDK/rv1126_rv1109_linux_release_20211022.tgz 3 编译依赖安装 gcc、g版本依赖安装 sudo apt-get install lib32gcc-7-dev g-7 l…

普通索引和唯一索引详解

前言 面试的时候有时会问面试者&#xff0c;普通索引和唯一索引有什么区别。很多人&#xff0c;甚至工作很多年的工程师回答的千篇一律 “普通索引可以有重复的值&#xff0c;唯一索引不能有重复的值”。于是我又问&#xff0c;这两个索引这两个索引效率哪个高&#xff0c;很少…

ant design pro的react项目build之后页面为空白解决方法

一、问题 执行yarn build之后访问dist文件夹中的index.html文件为空白 二、解决方法 找到config文件夹中的config.ts文件 添加代码 history: {type: hash }, publicPath: ./,修改完重新build一下就好了

BY组态功能清单

演示地址 &#xff1a;http://www.byzt.net:60/sm/ 官网地址&#xff1a;http://www.hcy-soft.com BY组态是一款非常优秀的纯前端的【web组态插件工具】&#xff0c;可无缝嵌入到vue项目&#xff0c;react项目等&#xff0c;由于是原生js开发&#xff0c;对于前端的集成没有框架…

你真的了解C语言中的【柔性数组】吗~

柔性数组 1. 什么是柔性数组2. 柔性数组的特点3. 柔性数组的使用4. 柔性数组的优势 1. 什么是柔性数组 也许你从来没有听说过柔性数组这个概念&#xff0c;但是它确实是存在的。 C99中&#xff0c;结构体中的最后⼀个元素允许是未知大小的数组&#xff0c;这就叫做柔性数组成员…

Spring Boot整合Kafka

文章目录 1. 介绍2. Kafka基础2.1. 安装KafKakafka集群搭建_kafka交流群-CSDN博客 3. Spring Boot整合Kafka3.1. 引入Kafka依赖3.2.编写配置文件 4. 生产者&#xff08;produced&#xff09;4.1. 生产者基础案例(基础测试) 5. 消费者5.1.消费者基本案例(基础测试) 6.Kafka常用配…