成武网站建设重庆市网络公司

news/2025/9/23 7:47:41/文章来源:
成武网站建设,重庆市网络公司,郑州小企业网站建设,上海中小企业服务中心官网【问题描述】[中等] 【解答思路】 1. 暴力 直接复制 将链表从头节点一个一个复制下去#xff0c; 在根据记录的总长度num#xff0c;遍历原来的每个节点的random到尾节点个数count#xff0c;然后顺序遍历找到新链表的该指针在num-count上 。 时间复杂度#xff1a;O(N^2…【问题描述】[中等] 【解答思路】 1. 暴力 直接复制 将链表从头节点一个一个复制下去 在根据记录的总长度num遍历原来的每个节点的random到尾节点个数count然后顺序遍历找到新链表的该指针在num-count上 。 时间复杂度O(N^2) 空间复杂度O(N) class Solution {public Node copyRandomList(Node head) {if(headnull) return head;Node newHeadnew Node(head.val);Node keepnewHead;Node nodehead.next;int num1;//记录节点数while(node!null){keep.nextnew Node(node.val);nodenode.next;keepkeep.next;num;}keep.nextnull;Node newnnewHead;Node oldnhead;//n r 定位randomNode n;Node r;int count;while (oldn!null){n oldn.random;//进行循环找到酒链表random指向的位置nrnewHead;count0;//计算出旧链表n距离尾节点个数while (n!null){nn.next;count;}//计算旧的random在链表中的位置 利用新旧链表新旧位置相同的原理for(int resnum-count;res0;res--){rr.next;}newn.randomr;//遍历新旧链表oldnoldn.next;newnnewn.next;}return newHead;} }作者zhao-1z 链接https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/solution/javaliang-chong-xie-fa-by-zhao-1z/ 2. HashMap O(N)空间 **时间复杂度O(N) 空间复杂度O(N) ** /* // Definition for a Node. class Node {public int val;public Node next;public Node random;public Node() {}public Node(int _val,Node _next,Node _random) {val _val;next _next;random _random;} }; */ public class Solution {// Visited dictionary to hold old node reference as key and new node reference as the valueHashMapNode, Node visited new HashMapNode, Node();public Node getClonedNode(Node node) {// If the node exists thenif (node ! null) {// Check if the node is in the visited dictionaryif (this.visited.containsKey(node)) {// If its in the visited dictionary then return the new node reference from the dictionaryreturn this.visited.get(node);} else {// Otherwise create a new node, add to the dictionary and return itthis.visited.put(node, new Node(node.val, null, null));return this.visited.get(node);}}return null;}public Node copyRandomList(Node head) {if (head null) {return null;}Node oldNode head;// Creating the new head node.Node newNode new Node(oldNode.val);this.visited.put(oldNode, newNode);// Iterate on the linked list until all nodes are cloned.while (oldNode ! null) {// Get the clones of the nodes referenced by random and next pointers.newNode.random this.getClonedNode(oldNode.random);newNode.next this.getClonedNode(oldNode.next);// Move one step ahead in the linked list.oldNode oldNode.next;newNode newNode.next;}return this.visited.get(head);} }作者LeetCode 链接https://leetcode-cn.com/problems/copy-list-with-random-pointer/solution/fu-zhi-dai-sui-ji-zhi-zhen-de-lian-biao-by-leetcod/ 3. HashMap O(N)空间 遍历第一遍链表我们不考虑链表之间的相互关系仅仅生成所有节点然后把它存到 HashMap 中hval 作为 keyNode 作为 value。 遍历第二遍链表将之前生成的节点取出来更新它们的 next 和 random 指针。 时间复杂度O(N) 空间复杂度O(N) public Node copyRandomList(Node head) {if (head null) {return null;}HashMapNode, Node map new HashMap();Node h head;while (h ! null) {Node t new Node(h.val); map.put(h, t);h h.next;}h head;while (h ! null) {if (h.next ! null) {map.get(h).next map.get(h.next);}if (h.random ! null) {map.get(h).random map.get(h.random);}h h.next;}return map.get(head); }作者windliang 链接https://leetcode-cn.com/problems/copy-list-with-random-pointer/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-32/ 4. HashMap O(N)空间 只遍历一次链表。 核心思想就是延迟更新它的 next。 1 - 2 - 3 用 cur 指向已经生成的节点的末尾 1 - 2 ^ c 然后将 3 构造完成 最后将 2 的 next 指向 3 1 - 2 - 3 ^ c 期间已经生成的节点存到 HashMap 中第二次遇到的时候直接从 HashMap 中拿 时间复杂度O(N) 空间复杂度O(N) public Node copyRandomList(Node head) {if (head null) {return null;}HashMapNode, Node map new HashMap();Node h head;Node cur new Node(-1); //空结点dummy 节点为了方便头结点计算while (h ! null) {//判断当前节点是否已经产生过if (!map.containsKey(h)) {Node t new Node(h.val);map.put(h, t);}//得到当前节点去更新它的 random 指针Node next map.get(h);if (h.random ! null) {//判断当前节点是否已经产生过if (!map.containsKey(h.random)) {next.random new Node(h.random.val);map.put(h.random, next.random);} else {next.random map.get(h.random);}}//将当前生成的节点接到 cur 的后边cur.next next;cur cur.next;h h.next;}return map.get(head); } 5. O(1)空间 (用原链表的 next 域保存新生成的节点) 主要解决的问题就是我们生成节点以后当更新它的 random 的时候怎么找到之前生成的节点前两种解法用了 HashMap 全部存起来这里的话可以利用原来的链表的指针域。 主要需要三步。 生成所有的节点并且分别插入到原有节点的后边更新插入节点的 random将新旧节点分离开来 时间复杂度O(N) 空间复杂度O(1) public Node copyRandomList(Node head) {if (head null) {return null;}Node l1 head;Node l2 null;//生成所有的节点并且分别插入到原有节点的后边while (l1 ! null) {l2 new Node(l1.val);l2.next l1.next;l1.next l2;l1 l1.next.next;}//更新插入节点的 randoml1 head;while (l1 ! null) {if (l1.random ! null) {l1.next.random l1.random.next;}l1 l1.next.next;}l1 head;Node l2_head l1.next;//将新旧节点分离开来while (l1 ! null) {l2 l1.next;l1.next l2.next;if (l2.next ! null) {l2.next l2.next.next;}l1 l1.next;}return l2_head; } /* // Definition for a Node. class Node {public int val;public Node next;public Node random;public Node() {}public Node(int _val,Node _next,Node _random) {val _val;next _next;random _random;} }; */ public class Solution {public Node copyRandomList(Node head) {if (head null) {return null;}// Creating a new weaved list of original and copied nodes.Node ptr head;while (ptr ! null) {// Cloned nodeNode newNode new Node(ptr.val);// Inserting the cloned node just next to the original node.// If A-B-C is the original linked list,// Linked list after weaving cloned nodes would be A-A-B-B-C-CnewNode.next ptr.next;ptr.next newNode;ptr newNode.next;}ptr head;// Now link the random pointers of the new nodes created.// Iterate the newly created list and use the original nodes random pointers,// to assign references to random pointers for cloned nodes.while (ptr ! null) {ptr.next.random (ptr.random ! null) ? ptr.random.next : null;ptr ptr.next.next;}// Unweave the linked list to get back the original linked list and the cloned list.// i.e. A-A-B-B-C-C would be broken to A-B-C and A-B-CNode ptr_old_list head; // A-B-CNode ptr_new_list head.next; // A-B-CNode head_old head.next;while (ptr_old_list ! null) {ptr_old_list.next ptr_old_list.next.next;ptr_new_list.next (ptr_new_list.next ! null) ? ptr_new_list.next.next : null;ptr_old_list ptr_old_list.next;ptr_new_list ptr_new_list.next;}return head_old;} } 6. O(1)空间 (用原链表的 random域保存新生成的节点) 可以利用原链表的 random 域把新生成的节点保存起来。 主要还是三个步骤。 生成所有的节点将它们保存到原链表的 random 域同时利用新生成的节点的 next 域保存原链表的 random。更新新生成节点的 random 指针。恢复原链表的 random 指针同时更新新生成节点的 next 指针。 时间复杂度O(N) 空间复杂度O(1) public Node copyRandomList(Node head) {if (head null) {return null;}Node l1 head;Node l2 null;//生成所有的节点讲它们保存到原链表的 random 域//同时利用新生成的节点的 next 域保存原链表的 random。while (l1 ! null) {l2 new Node(l1.val);l2.next l1.random;l1.random l2;l1 l1.next;}l1 head;//更新新生成节点的 random 指针。while (l1 ! null) {l2 l1.random;l2.random l2.next ! null ? l2.next.random : null;l1 l1.next;}l1 head;Node l2_head l1.random;//恢复原链表的 random 指针同时更新新生成节点的 next 指针。while (l1 ! null) {l2 l1.random;l1.random l2.next;l2.next l1.next ! null ? l1.next.random : null;l1 l1.next;}return l2_head; } 【总结】 1.思路1暴力ON^2- 思路2.3.4 HashMap O(N)-思路5.6 复制链表O1 2.链表操作的核心思想就是在改变某一个节点的指针域的时候一定要把该节点的指针指向的节点用另一个指针保存起来以免造成丢失。 3.链表 画图 转载链接https://leetcode-cn.com/problems/copy-list-with-random-pointer/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-32/ 转载链接https://leetcode-cn.com/problems/copy-list-with-random-pointer/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-32/

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

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

相关文章

松江 网站建设公司网页设计图片相对路径

安装 先从 官方网站 下载安装包,有时 node 版本太新会导致失败,详见下方的常见问题第2点 cd /home // 创建目录,将下载好的 node 安装包上传到此目录 mkdir Download mkdir /usr/local/lib/node解压 // 解压,前面是文件当前路径…

网站建设哪里好薇浙江省建设培训中心网

第一步:得到Pid 如果我们不知道TAG的情况下,先得到进程的PID adb shell ps | grep call 会显示出进程关于call的出来 比如得到pid 是1123 第二步:过滤Pid adb logcat | grep 1123 就可以看到过滤的日志了 常见的命令 杀死进程 adb shell kill pid adb shell am force-s…

ps做网站头部的图网站建设站长

Guava是一个开放源代码库,其中包含许多Java类,由Google编写。 它是杂项实用程序函数和类的潜在有用来源,我敢肯定,许多开发人员以前已经写过自己,或者只是想要并且从来没有时间编写它们。 这是使用它的5个充分理由&…

宁波网站建设托管17zwd一起做业网站

python 库windows安装 兵种:python程序员。 等级:二级。 攻击:较高。 防御:普通。 价格:低。 天赋:胶水,我方有c程序员时,速度可达到c程序员的80%。 天赋:成熟&…

服务好的常州网站建设无锡做网站公司哪家好电话

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

网站怎么做抽奖wordpress个人

文章目录 前言正文什么是 MVVC什么是 MVVM什么是 SPA什么是SFC为什么 data 选项是一个函数Vue 组件通讯(传值)有哪些方式Vue 的生命周期方法有哪些如何理解 Vue 的单项数据流如何理解 Vue 的双向数据绑定Vue3的响应式原理是什么介绍一下 Vue 的虚拟 DOM介…

贵州铁路建设网站个人做网站模版是否有人买

目录 题目描述:答案:考点:代码实现: 题目描述: 哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整数。 例如126是十进制下的一个哈沙德数,因为(126)1o mod (1+2&…

广州网站建设很棒 乐云践新国家建设部建筑业网站

优学院《土地资源学》答案在线查题2020高校邦《Java核心开发技术【实境编程】》章测试答案更多相关问题[问答题] 老区的汽油分馏塔(DA-101)原设计结构如何?[问答题] SRT-I型炉与SRT-I改进型炉(乙烷炉)的烧焦过程有何不同&#xff…

做网站工作职责电子商务主要学什么就业前景好不好

随着科技的发展,系统工程的设计体量逐渐庞大起来,尤其是对于轨道交通、航空航天、核电站等安全关键领域中,如何在复杂度逐年变大的同时保证其安全性和可靠性,是近年来各大公司需要研究的课题。最近比较火热的基于模型的系统工程&a…

网站搭建玩要多长时间wordpress博客程序文章自动更新

变参数函数 变参数函数是接收可变数量参数的函数(例如 std::printf )。 为声明变参数函数,要以省略号为最后的形参,例如 int printf(const char* format, ...); 。语法上的额外细节、自动参数转换及替用项见变参数。 为从函数…

php网站哪些电子商务网站建设实训

题目 天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号…

中国商标注册网查询网官网江苏网站seo营销模板

FreeSql 支持 CodeFirst 迁移结构至数据库,这应该是(O/RM)必须标配的一个功能。 与其他(O/RM)不同FreeSql支持更多的数据库特性,而不只是支持基础的数据类型,这既是优点也是缺点,优点是充分利用数据库特性辅助开发,缺点…

广元 网站建设十堰网络科技公司排名

learn from 从0开始学大数据&#xff08;极客时间&#xff09; MapReduce 编程模型 包含 Map 和 Reduce 两个过程 map 的主要输入是一对 <Key, Value> 值&#xff0c;输出一对 <Key, Value> 值将相同 Key 合并&#xff0c;形成 <Key, Value 集合 >再将这个…

电子商务网站建设技术基础--asp.net程序设计教学大纲wordpress轮播图设置

目录 一、事务的概念 二、事务的核心特性 三、事务操作中的常见BUG 3.1 脏读 3.2 不可重复读 3.3 幻读 四、隔离级别 五、使用事务 一、事务的概念 “事务”是指一组操作&#xff0c;在逻辑上是不可分割的&#xff0c;组成这组操作的各个语句&#xff0c;或者全部执行成…

博物馆网站页面设计说明公司名字大全及寓意

一、基本信息 标题&#xff1a;MySQL数据库在自动测试系统中的应用 时间&#xff1a;2017 出版源&#xff1a;宁夏职业技术学院 领域分类&#xff1a;无线互联科技 二、研究背景 问题定义&#xff1a;文章介绍了MySQL数据库的特点&#xff0c;结合自动测试系统运行中的实际&…

网站策划方案书的内容浙江省城乡建设厅官网

主要是记录一下idea中实用插件&#xff0c;方便开发&#xff0c;换个电脑工作的时候也可以直接在市场中下载使用。 1、Easy Javadoc 自动生成javadoc文档注释&#xff0c;基本上是按照字段名或者方法名翻译的&#xff0c;还是相当好用的。 2、EasyYapi 可以快捷生成接口文档…

网站开通怎么样检查网站有没有做全站301

本文要推荐的[TOOLFK]在线汉字/字母/人民币/简繁体转换工具,提供简繁体在线转换、人民币大写转换、字母大小写互转、汉字转拼音在线日常使用工具。網站名稱&#xff1a;ToolFk網站鏈結&#xff1a;https://www.toolfk.com/工具链接&#xff1a;https://www.toolfk.com/tool-onl…

怎么建立自己的网站有经验的网站建设

qt 系统 - 定时器 定时器1. QTimerEvent2. QTimer3. 获取系统日期及时间 定时器 Qt 中在进行窗口程序的处理过程中&#xff0c;经常要周期性的执⾏某些操作&#xff0c;或者制作⼀些动画效果&#xff0c;使用定时器就可以实现。所谓定时器就是在间隔⼀定时间后&#xff0c;去执…

上海这样的地段简直是逆天

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087谈论过很多上海滨江地段的价值,关于趋势关于规划也关于未来确实上…

【GitHub每日速递 250923】 Google 又放大招!TimesFM 2.5 参数减半,预测更准更快

原文: https://mp.weixin.qq.com/s/sBH-0vykIzntRBELaDvAHw 开源 Airtable 替代方案 NocoDB,极速在线构建数据库! nocodb一个开源的在线数据库管理工具。简单讲,它就像一个免费的、可自托管的“表格+数据库”混合工…