当前位置: 首页 > news >正文

字节算法-链表翻转与变形

文章目录

  • 题目与变形
  • 解法

题目与变形

字节一面中关于 K个一组链表反转 的题目变形。

  • K个一组链表反转。
  • K个一组链表反转,链表尾不足K个的元素也需要反转。
  • K个一组链表反转,但是从链表尾部开始反转。
  • 反转从位置 left 到位置 right 的链表节点

解法

四个算法万变不离其宗,主要掌握原题即可。

public class No0025ReverseGroup2 {public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5, 6, 7, 8};int k = 3;No0025ReverseGroup2 demo = new No0025ReverseGroup2();ListNode node = ListNode.createListNode(array);System.out.println("原始节点: " + node);ListNode res = demo.reverseKGroup(node, k);System.out.println("K个一组反转: " + res);ListNode res2 = demo.reverseKGroup2(ListNode.createListNode(array), k);System.out.println("剩余不足也K个反转: " + res2);ListNode res3 = demo.reverseKGroup3(ListNode.createListNode(array), k);System.out.println("从尾部开始K个一组反转: " + res3);ListNode res4 = demo.reverseKGroup4(ListNode.createListNode(array), 3, 6);System.out.println("反转指定区域的链表: " + res4);}/*** 反转 left 到 right 位置的元素*/private ListNode reverseKGroup4(ListNode listNode, int begin, int stop) {ListNode result = new ListNode();result.next = listNode;ListNode left = result;ListNode right = result;for (int i = 0; i < stop; i++) {if (i < begin - 1) {// 保持 left.next 指向反转的起始节点left = left.next;}right = right.next;}while (left.next != right) {// 理解这里就OK了ListNode curr = left.next;left.next = curr.next;curr.next = right.next;right.next = curr;}return result.next;}/*** 变形2,从链表尾部开始 k 个一组反转*/private ListNode reverseKGroup3(ListNode listNode, int k) {int count = 0;ListNode countNode = listNode;while (Objects.nonNull(countNode)) {countNode = countNode.next;count++;}ListNode result = new ListNode(0);result.next = listNode;ListNode left = result;ListNode right = result;int beginIndex = count % 3;for (int i = 0; i < beginIndex; i++) {left = left.next;right = right.next;}while (true) {for (int i = 0; i < k && Objects.nonNull(right); i++) {right = right.next;}if (Objects.isNull(right)) {break;}ListNode leftPtr = left.next;while (left.next != right) {// 理解这里就OK了ListNode curr = left.next;left.next = curr.next;curr.next = right.next;right.next = curr;}left = leftPtr;right = leftPtr;}return result.next;}/*** 变形1,剩余元素不足K个也需要反转*/private ListNode reverseKGroup2(ListNode listNode, int k) {ListNode result = new ListNode(0);result.next = listNode;ListNode left = result;ListNode right = result;ListNode preRight = right;while (true) {for (int i = 0; i < k && Objects.nonNull(right); i++) {preRight = right;right = right.next;}if (Objects.isNull(right)) {// 处理剩余部分的反转ListNode curr = left.next;left.next = curr.next;curr.next = preRight.next;preRight.next = curr;break;}ListNode leftPtr = left.next;while (left.next != right) {// 理解这里就OK了ListNode curr = left.next;left.next = curr.next;curr.next = right.next;right.next = curr;}left = leftPtr;right = leftPtr;}return result.next;}/*** 原题,K个一组反转*/private ListNode reverseKGroup(ListNode listNode, int k) {ListNode result = new ListNode(0);result.next = listNode;ListNode left = result;ListNode right = result;while (true) {for (int i = 0; i < k && Objects.nonNull(right); i++) {right = right.next;}if (Objects.isNull(right)) {break;}ListNode leftPtr = left.next;while (left.next != right) {// 理解这里就OK了ListNode curr = left.next;left.next = curr.next;curr.next = right.next;right.next = curr;}left = leftPtr;right = leftPtr;}return result.next;}
}
// 补充自用节点类
public class ListNode {public int val;public ListNode next;public ListNode() {}public ListNode(int val) {this.val = val;}public ListNode(int val, ListNode next) {this.val = val;this.next = next;}public static ListNode createListNode(int[] array) {ListNode head = new ListNode(array[0]);ListNode node = head;for (int i = 1; i < array.length; i++) {ListNode next = new ListNode(array[i]);node.next = next;node = next;}return head;}
}

相关文章:

字节算法-链表翻转与变形

文章目录 题目与变形解法 题目与变形 字节一面中关于 K个一组链表反转 的题目变形。 K个一组链表反转。K个一组链表反转&#xff0c;链表尾不足K个的元素也需要反转。K个一组链表反转&#xff0c;但是从链表尾部开始反转。反转从位置 left 到位置 right 的链表节点 解法 四…...

十一、软考-系统架构设计师笔记-未来信息综合技术

1、信息物理系统技术概述 信息物理系统的概念 信息物理系统(Cyber-Physical Systems&#xff0c;CPS)通过集成先进的感知、计算、通信、控制等信息技术和自动控制技术&#xff0c;构建了物理空间与信息空间中人、机、物、环境、信息等要素相互映射、适时交互、高效协同的复杂系…...

非同源点云尺度对齐及点云配准(cloudcompare软件)

1.点云裁减与尺度缩放 发现口扫stl转为的点云尺度是原始点云的1000倍 打开meshlab&#xff0c;通过“Filters” > “Mesh Layer” > “Transform: Scale”缩放1000倍&#xff0c;得到以米为单位的真实尺寸 此时在meshlab中进行点云手动裁减后效果 将ply文件转为xyz文件…...

体检业务数字化管理平台,健康体检管理系统(PEIS)源码

健康体检管理系统&#xff08;PEIS&#xff09;源码&#xff0c;自动生成体检报告&#xff0c;提供查询、统计和分析功能 健康体检管理系统&#xff08;PEIS&#xff09;可以建立完整的健康档案&#xff0c;系统实现了与HIS系统的无缝连接&#xff0c;着重于临床信息系统的应用…...

【SpringCloud微服务实战04】Nacos 配置中心

一、Nacos配置添加 二、Nacos配置读取 1、引入Nacos的配置管理客户端依赖&#xff1a; <!--nacos配置管理依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</arti…...

无雀新功能宣传板之视频直播+Teambition

1. 今日新功能 钉钉视频会议新功能 视频会议功能&#xff0c;打造了一系列独具特色的通话海报模板供用户选择。其中引人瞩目的是为龙年限定的新春主题通话海报&#xff0c;它巧妙地融入了中国传统文化元素&#xff0c;将庄重且喜庆的龙年新春气息浓缩在画面之中。 自定义通话…...

学生选课系统的最简逻辑--一个学生选一门课

需求&#xff1a;设计一个学生选课系统&#xff0c;要求如下&#xff1a;有一个学生类&#xff0c;有一个课程类&#xff0c;还有一个Teacher类。。学生类包括姓名、学号、已选课程。课程类包括课程名称、授课老师属性。 老师包括老师的名字、老师的电话&#xff0c;老师的课程…...

波司登高德康:以有“韧性”的创新应变市场新浪潮

伴随着消费升级&#xff0c;羽绒服市场需求日益旺盛。愈发多元化的需求对于企业发展也有着更高的要求。如何更好推动行业多元化发展&#xff0c;可以从波司登的品牌升级、产品创新、模式创新、数字技术创新、绿色发展创新等方面窥得一二。 高德康总裁接受新华网主持人采访 对此…...

装饰你的APP:使用Lottie-Android创建动画效果

1. Lottie-Android简介 Lottie-Android是一个强大的开源库,由Airbnb开发,旨在帮助开发者轻松地在Android应用中添加高质量的动画效果。它基于Adobe After Effects软件中的Bodymovin插件,通过解析导出的JSON文件来渲染并播放复杂的矢量动画。 Lottie-Android提供了许多令人…...

成都爱尔林江院长解析巩膜镜是什么?它适合哪些人群

巩膜镜&#xff0c;全称为硬性透氧性巩膜接触镜&#xff0c;它有着特殊设计&#xff0c;大直径镜片像桥梁一样呈拱形覆盖角膜及角巩膜缘&#xff0c;从角膜上方横跨而过完全无接触、无任何机械性摩擦&#xff0c;最终贴合于巩膜。 巩膜镜的作用原理 光学成像&#xff1a; 配戴…...

苹果cms模板保护设置,防止被扒

苹果cms模板保护设置&#xff0c;防止被扒 如今互联网时代&#xff0c;网站模板前端被扒是常有的事&#xff0c;如何防止模板数据被扒&#xff1f; 保护设置方法&#xff1a; 登录宝塔 找到安装模板的网站 设置禁止访问文件 方法参考截图后缀填&#xff1a;php|html 目录填&a…...

Claude3、GPT-4、Gemini、Sora VS :谁将成为下一代科研利器?

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…...

vue 函数防抖

背景 一个页面使用监听器&#xff0c;监听了页面的三个参数&#xff0c;页面初始化的时候&#xff0c;三个参数都发生了变化。发送了三次请求&#xff0c;页面却使用的是第二次请求的数据。希望短时间内发生多次变化的时候&#xff0c;只发送一次请求 思路 这个需求可以通过使用…...

WordPress建站入门教程:如何创建菜单和设置前端导航菜单?

前面我们跟大家分享了WordPress如何上传安装WordPress主题&#xff0c;但是启用主题后前端没有看到有导航菜单&#xff0c;这是因为我们还没有创建菜单和设置导航菜单。 JianYue主题导航菜单和右上角菜单 今天boke112百科就继续跟大家分享WordPress站点如何创建菜单和设置前端…...

Rust:为 Trait 定义默认的方法

当你提到“指定 trait 的实现”并使用 :: 符号时&#xff0c;你可能是指在某些情况下&#xff0c;你想直接通过 trait 而不是具体的类型来调用方法。这在 trait 提供了默认方法实现时尤其有用&#xff0c;因为你可以不依赖任何具体的类型实现来调用这些方法。 然而&#xff0c…...

掌握Redis,看完这篇文章就够了

一&#xff0c;数据库的配置 内存数据库 MySQL与mongodb都是以文件的形式存储在磁盘上的 redis数据在内存中&#xff0c;操作内存的速度远远高于磁盘并且redis数据最终也可以存储在磁盘上 redis的存储结构为简直存储数据库类似于python中的字典的存储方式 redis的服务器与客户…...

烟火识别检测摄像头-火焰烟雾智能检测预警系统---豌豆云

火焰烟雾智能检测预警系统利用现场已有的监控摄像头&#xff0c;火焰烟雾智能检测预警系统对监控区域内的烟雾和火焰进行识别。 这种识别技术不仅准确率高&#xff0c;而且速度快&#xff0c;能够在短时间内对大量的视频数据进行处理和分析。 同时&#xff0c;该系统还能够动…...

js【详解】Promise

为什么需要使用 Promise &#xff1f; 传统回调函数的代码层层嵌套&#xff0c;形成回调地狱&#xff0c;难以阅读和维护&#xff0c;为了解决回调地狱的问题&#xff0c;诞生了 Promise 什么是 Promise &#xff1f; Promise 是一种异步编程的解决方案&#xff0c;本身是一个构…...

八股文-持续更新......

文章目录 SpringSpringBootDubboMQMysqlNettyRedis并发ZookeeperMybatisElasticsearchLinux微服务ZookeeperMybatisElasticsearchLinux...

Redis 大key和热key问题及处理

一、说说什么是Redis、及特点&#xff1f; Redis是一个基于内存存储数据运行并支持持久化、使用key/value形式存储的高性能的nosql数据库&#xff0c;适合用于存储频繁访问&#xff0c;数据量较小的场景下。 特点&#xff1a; 支持数据持久化&#xff1a;可以将内存中的数据保…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...