记一道字节跳动的算法面试题

戳蓝字“CSDN云计算”关注我们哦!

640?wx_fmt=jpeg
来源公众号:苦逼的码农
作者:帅地

前几天有个朋友去面试字节跳动,面试官问了他一道链表相关的算法题,不过他一时之间没做出来,就来问了我一下,感觉这道题还不错,拿来讲一讲。

题目

这其实是一道变形的链表反转题,大致描述如下

给定一个单链表的头节点 head,实现一个调整单链表的函数,使得每K个节点之间为一组进行逆序,并且从链表的尾部开始组起,头部剩余节点数量不够一组的不需要逆序。(不能使用队列或者栈作为辅助)

例如:链表:1->2->3->4->5->6->7->8->null, K = 3。那么 6->7->8,3->4->5,1->2各位一组。调整后:1->2->5->4->3->8->7->6->null。其中 1,2不调整,因为不够一组。

解答

这道题的难点在于,是从链表的尾部开始组起的,而不是从链表的头部,如果是头部的话,那我们还是比较容易做的,因为你可以遍历链表,每遍历 k 个就拆分为一组来逆序。但是从尾部的话就不一样了,因为是单链表,不能往后遍历组起。不过这道题肯定是用递归比较好做,对递归不大懂的建议看我之前写的一篇文章为什么你学不会递归?告别递归,谈谈我的一些经验,这篇文章写了关于递归的一些套路。

先做一道类似的反转题

在做这道题之前,我们不仿先来看看如果从头部开始组起的话,应该怎么做呢?例如:链表:1->2->3->4->5->6->7->8->null, K = 3。调整后:3->2->1->6->5->4->7->8->null。其中 7,8不调整,因为不够一组。

对于这道题,如果你不知道怎么逆序一个单链表,那么可以看一下我之前写的如何优雅着反转单链表

这道题我们可以用递归来实现,假设方法reverseKNode()的功能是将单链表的每K个节点之间逆序(从头部开始组起的哦);reverse()方法的功能是将一个单链表逆序。

那么对于下面的这个单链表,其中 K = 3。

640?wx_fmt=png

我们把前K个节点与后面的节点分割出来:

640?wx_fmt=png

temp指向的剩余的链表,可以说是原问题的一个子问题。

我们可以调用reverseKNode()方法将temp指向的链表每K个节点之间进行逆序。

再调用reverse()方法把head指向的那3个节点进行逆序,结果如下:

640?wx_fmt=png

再次声明,如果对这个递归看不大懂的,建议看下我那篇递归的文章

接着,我们只需要把这两部分给连接起来就可以了。最后的结果如下:

640?wx_fmt=png

代码如下:

    //k个为一组逆序public ListNode reverseKGroup(ListNode head, int k) {ListNode temp = head;for (int i = 1; i < k && temp != null; i++) {temp = temp.next;}//判断节点的数量是否能够凑成一组if(temp == null)return head;ListNode t2 = temp.next;temp.next = null;//把当前的组进行逆序ListNode newHead = reverseList(head);//把之后的节点进行分组逆序ListNode newTemp = reverseKGroup(t2, k);// 把两部分连接起来head.next = newTemp;return newHead;}//逆序单链表private static ListNode reverseList(ListNode head) {if(head == null || head.next == null)return head;ListNode result = reverseList(head.next);head.next.next = head;head.next = null;return result;}

回到本题

这两道题可以说是及其相似的了,只是一道从头部开始组起,这道从头部开始组起的,也是 leetcode 的第 25 题。而面试的时候,经常会进行变形,例如这道字节跳动的题,它变成从尾部开始组起,可能你一时之间就不知道该怎么弄了。当然,可能有人一下子就反应出来,把他秒杀了。

其实这道题很好做滴,你只需要先把单链表进行一次逆序,逆序之后就能转化为从头部开始组起了,然后按照我上面的解法,处理完之后,把结果再次逆序即搞定。两次逆序相当于没逆序。

例如对于链表(其中 K = 3)

640?wx_fmt=png

我们把它从尾部开始组起,每 K 个节点为一组进行逆序。

步骤如下

1、先进行逆序

640?wx_fmt=png

逆序之后就可以把问题转化为从头部开始组起,每 K 个节点为一组进行逆序。

2、处理后的结果如下

640?wx_fmt=png

3、接着在把结果逆序一次,结果如下

640?wx_fmt=png

代码如下

public ListNode solve(ListNode head, int k) {// 调用逆序函数head = reverse(head);// 调用每 k 个为一组的逆序函数(从头部开始组起)head = reverseKGroup(head, k);// 在逆序一次head = reverse(head);return head;}

类似于这种需要先进行逆序的还要两个链表相加,这道题字节跳动的笔试题也有出过,如下图的第二题

640?wx_fmt=jpeg

这道题就需要先把两个链表逆序,再节点间相加,最后在合并了。

总结

关于链表的算法题,在面试的时候听说是挺常考的,大家可以多注意注意,遇到不错的链表算法题,也欢迎扔给我勒。

640?wx_fmt=png

福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

640?wx_fmt=jpeg

推荐阅读:

  • mysql表设计要注意什么?

  • 漫话:如何给女朋友解释鸿蒙OS是怎样实现跨平台的?

  • 换脸软件 ZAO 刷屏:你在玩换脸,别人想要你的脸!

  • 只给测试集不给训练集,要怎么做自己的物体检测器?

  • 华为鸿蒙为什么非要碰物联网?

  • Dropout、梯度消失/爆炸、Adam优化算法,神经网络优化算法看这一篇就够了

真香,朕在看了!

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

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

相关文章

带您探究云存储的奥秘,三分钟帮您快速了解OSS

摘要&#xff1a; 快来&#xff0c;带您探究云存储的奥秘&#xff0c;三分钟帮您快速了解OSS。 阿里云对象存储服务&#xff0c;简称 OSS&#xff0c;是一种面向海量数据规模的分布式存储服务&#xff0c;具有稳定、可靠、安全、低成本的特点&#xff0c;能够提供十一个九的数据…

mysql3错误_第3行MYSQL语法错误

我第一次尝试将大量数据写入MYSQL数据库。我正在使用以下插入查询&#xff1a;if ($_POST[SubmitSave] ) {$connection mysql_connect($host, $user, $pass);if (!$connection){die(Could not connect: . mysql_error());}mysql_select_db($db, $connection);if ($_POST[SBI_…

python控制程控电源_程控电源原理_程控电源的用途浅谈

程控电源简介程控电源指通过外部控制来设定输出电压、输出电流的稳压、稳流或稳压/稳流的电源。程控河试电源采用微机控制&#xff0c;技术先进&#xff0c;全程控、全按键操作&#xff0c;体积小、重量轻、携带方便&#xff0c;既可用于实验室&#xff0c;也可以现场使用。程控…

SQL入门试炼创建表

创建表 一定要设置主键 表和表之间关联&#xff0c;推荐创建中间表&#xff0c;不建议使用外键(影响性能) 用户表 CREATE TABLE sys_user (user_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 用户ID,dept_id bigint(20) DEFAULT NULL COMMENT 部门ID,login_name varchar(30…

六大主题报告,四大技术专题,AI开发者大会首日精华内容全回顾

戳蓝字“CSDN云计算”关注我们哦&#xff01;9月6-7日&#xff0c;2019中国AI开发者大会&#xff08;AI ProCon 2019&#xff09; 在北京拉开帷幕。本次大会由新一代人工智能产业技术创新战略联盟&#xff08;AITISA&#xff09;指导&#xff0c;鹏城实验室、北京智源人工智能研…

SQL老司机,居然是这样智能挖掘异常日志

摘要&#xff1a; 提取异常日志是个大难题 面对海量的日志(TB乃至PB级别&#xff09;&#xff0c;如何从日志中挖掘出异常信息对于大部分的开发者而言是一个大难题。例如&#xff0c;判断机器的延时是否正常&#xff0c;部分request是否正常。通常&#xff0c;我们对于异常的数…

华为杯数学建模优秀论文_【优秀论文】2019数维杯国际大学生数学建模竞赛B题优秀论文...

推荐入群2020数维杯国际赛参赛群132020数维杯国际大学生数学建模竞赛于2020年11月26日08:00(周四)—11月30日08:00(周一)进行&#xff0c;报名正在火热进行中&#xff0c;扫码了解详情或可直接报名&#xff01;扫码了解详情或可直接报名赛题B回顾2019数维杯国际赛赛题B回顾点击…

Lucene解析 - 基本概念

摘要&#xff1a; 前言 Apache Lucene是一个开源的高性能、可扩展的信息检索引擎&#xff0c;提供了强大的数据检索能力。Lucene已经发展了很多年&#xff0c;其功能越来越强大&#xff0c;架构也越来越精细。它目前不仅仅能支持全文索引&#xff0c;也能够提供多种其他类型的索…

FileZilla 下载安装使用

我电脑是win10 64位的&#xff0c;不知软件为何这样命名&#xff0c;已经用了2年多了。 FileZilla 版本&#xff1a;3.27.1下载链接 http://gainetsoftwares.kuaiyunds.com/gainetsoftwares/FileZilla3d0899f3-d291-4714-bd45-027ffaa49962.zip 1、 双击FileZilla_3.27.1_win3…

Vicor再携创新产品“登陆”ODCC大会,有详情!

戳蓝字“CSDN云计算”关注我们哦&#xff01;目前&#xff0c;越来越多的应用系统对电源系统的功率密度及转换效率提出了更高要求&#xff0c;在电源系统设计中不仅功率密度是众多要素之一&#xff0c;其他例如电源系统架构、多种开关拓扑、电源模块和基于分立器件设计的封装技…

Lucene 查询原理

摘要&#xff1a; # 前言 Lucene 是一个基于 Java 的全文信息检索工具包&#xff0c;目前主流的搜索系统Elasticsearch和solr都是基于lucene的索引和搜索能力进行。想要理解搜索系统的实现原理&#xff0c;就需要深入lucene这一层&#xff0c;看看lucene是如何存储需要检索的数…

mac解压rar命令_苹果mac电脑上很好用的免费压缩软件?ezip压缩软件分享

在开始之前&#xff0c;先问问用苹果电脑的大家一个问题&#xff0c;有没有遇到过这种情况呢&#xff1f;就是好不容易在网上找到了需要的素材&#xff0c;然后下载回来后发现&#xff0c;想解压却解压不了。因为mac系统自带的压缩工具是不支持rar格式的&#xff0c;而在网上很…

python第四章单元测试_智慧树APPPython语言应用第四单元章节测试答案

有关风能资源&#xff0c;下列描述正确的是? 受地球自转和公转影响|太阳能的一种转化形式|储量大、分布广|能量密度低【判断题】古代官式建筑中以重檐歇山顶的规格最高,如故宫太和殿。() (5.0分)【单选题】当发生胆红素脑病时A. 血清胆红素≥85μmol/LB. 血清胆红素≤171μmol…

日常软件下载官网

官网链接3322下载站http://www.3322.cc/pc6下载http://www.pc6.com/服务器常用软件https://www.zzidc.com/main/softwares/showSoftwares

如何从机器学习数据中获取更多收益

摘要&#xff1a; 本文讲解一些关于机器学习数据集的小技巧&#xff0c;分享个人经验&#xff0c;可供读者参考。对于深度学习而言&#xff0c;合适的数据集以及合适的模型结构显得至关重要。选择错误的数据集或者错误的模型结构可能导致得到一个性能不佳的网络模型&#xff0c…

CSDN×易观算法大赛火热进行中~

伴随着5G、物联网与大数据形成的后互联网格局的逐步形成&#xff0c;日益多样化的用户触点、庞杂的行为数据和沉重的业务体量也给我们的数据资产管理带来了不容忽视的挑战。为了建立更加精准的数据挖掘形式和更加智能的机器学习算法&#xff0c;对不断生成的用户行为事件和各类…

该放弃正在堕落的“RNN和LSTM”了

摘要&#xff1a; 随着技术的发展&#xff0c;作者觉得是时候放弃LSTM和RNN了&#xff01;到底为什么呢&#xff1f;来看看吧&#xff5e;递归神经网络&#xff08;RNN&#xff09;&#xff0c;长期短期记忆&#xff08;LSTM&#xff09;及其所有变体&#xff1a;现在是放弃它们…

textarea支持a标签_微慕小程序开源版A标签优化说明

微慕WordPress小程序所有版本里&#xff0c;对于文章详情里文字内容的解析&#xff0c;都是通过开源组件&#xff1a;wxParse&#xff1b;不过这个组件已经停止维护&#xff0c;微慕小程序在这个组件上做了一些优化&#xff0c;让文章里文字在小程序显示更加完美。但&#xff0…

weigm怎么下载_彩七官网下载地址|官网

游戏介绍彩七官网下载地址|官网 是一款非常火爆的盒游戏&#xff0c;这款游戏非常受欢迎&#xff0c;因为它的玩法非常的丰富&#xff0c;在彩七官网下载地址|官网你可以自由建造任何事物&#xff0c;你可以打造一个属于你自己的世界&#xff0c;这不仅仅是一款沙盒游戏&#x…

七本书籍带你打下机器学习和数据科学的数学基础

摘要&#xff1a; 本文主要介绍七本关于机器学习和数据科学数学基础的经典教材&#xff0c;是一份不可多得的书单整理。大多数人学习数据科学的重心放在编程上面&#xff0c;然而&#xff0c;要真正精通数据科学的话是不能够忽视数据科学背后的数据基础。本篇文章&#xff0c;将…