面试经典150题(50-53)

leetcode 150道题 计划花两个月时候刷完,今天(第二十二天)完成了4道(50-53)150:

50.(141. 环形链表)题目描述:

给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。 否则,返回 false

第一版(这个是经典的题目,快慢指针就可以,如果有环他们肯定会相遇,没环一定会到 null )

public class Solution {public boolean hasCycle(ListNode head) {ListNode low=head;ListNode fast=head;while(fast!=null&&low!=null){low=low.next;if(fast.next==null){return false;}fast=fast.next.next;if(low==fast){return true;}}return false;}
}

第二版(我总感觉我对这个起始的指针处理不好,就看了一下解题,他是反着去判断了,也可以学习一下)

public class Solution {public boolean hasCycle(ListNode head) {if(head==null||head.next==null){return false;}ListNode low=head;ListNode fast=head.next;while(low!=fast){if(fast==null||fast.next==null){return false;}fast=fast.next.next;low=low.next;}return true;}
}

51.(2. 两数相加)题目描述:

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

第一版(这个题我第一反应以为他第一个指针是最大位数。。看了好久才读懂了题目。。但是这个题目处理的应该是一个模板,就是 3个while 的模板。。一般就是处理长度不一样的情况下我感觉都是3个while。。)

class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode res=new ListNode(0);ListNode resTemp=res;int add=0;while(l1!=null&&l2!=null){int num=l1.val+l2.val+add;add=num/10;num%=10;resTemp.next=new ListNode(num);resTemp=resTemp.next;l1=l1.next;l2=l2.next;}while(l1!=null){int num=l1.val+add;add=num/10;num%=10;resTemp.next=new ListNode(num);resTemp=resTemp.next;l1=l1.next;}while(l2!=null){int num=l2.val+add;add=num/10;num%=10;resTemp.next=new ListNode(num);resTemp=resTemp.next;l2=l2.next;}if(add!=0){resTemp.next=new ListNode(add);resTemp=resTemp.next;}return res.next;}
}

52.(21. 合并两个有序链表)题目描述:

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

第一版(这个也是我上面说的长度不一样要一起处理的 3个while模板,只不过这个是链表,你只需要指定了头后面也会跟着这个头,所以这块就是 一个 while 两个 if)

class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode res=new ListNode(0);ListNode resTemp=res;while(list1!=null&&list2!=null){if(list1.val<list2.val){resTemp.next=new ListNode(list1.val);list1=list1.next;}else{resTemp.next=new ListNode(list2.val);list2=list2.next;}resTemp=resTemp.next;}if(list1!=null){resTemp.next=list1;}if(list2!=null){resTemp.next=list2;}return res.next;}
}

53.(138. 随机链表的复制) 题目描述:

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。
构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。
例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。
返回复制链表的头节点。
用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:
val:一个表示 Node.val 的整数。
random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为  null 。
你的代码 只 接受原链表的头节点 head 作为传入参数。

第一版(这个题比较长,意思就是每个节点都要新建,我第一次写了好久,但是写出来还是一坨。。)

class Solution {public Node copyRandomList(Node head) {Node res=new Node(0);Node resTemp=res;Node headTemp=head;Map<Node,Integer> nodeMap=new HashMap();int index=0;while(headTemp!=null){resTemp.next=new Node(headTemp.val);nodeMap.put(headTemp,index++);headTemp=headTemp.next;resTemp=resTemp.next;}Map<Integer,Integer> indexMap=new HashMap();for (Map.Entry<Node, Integer> entry : nodeMap.entrySet()) {if(entry.getKey().random==null){indexMap.put(entry.getValue(),-1);}elseindexMap.put(entry.getValue(),nodeMap.get(entry.getKey().random));}// 复制 random 开始resTemp=res.next;Node temp=res.next;index=0;while(resTemp!=null){temp=res.next;if(indexMap.get(index)!=-1){for(int i=0;i<indexMap.get(index);i++){temp=temp.next;}resTemp.random=temp;}index++;resTemp=resTemp.next;}return res.next;}
}

第二版(看了解题,真的这个思想很好,把每个节点单独出来,一个一个来赋值他的 next和 random)

class Solution {public Node copyRandomList(Node head) {if(head==null){return null;}Map<Node, Node> nodeMap = new HashMap<Node, Node>();Node headTemp=head;while(headTemp!=null){nodeMap.put(headTemp,new Node(headTemp.val));headTemp=headTemp.next;}headTemp=head;while(headTemp!=null){Node nodeNew=nodeMap.get(headTemp);if(headTemp.next!=null){nodeNew.next=nodeMap.get(headTemp.next);}if(headTemp.random!=null){nodeNew.random=nodeMap.get(headTemp.random);}headTemp=headTemp.next;}return nodeMap.get(head);}
}

昨天又鸽了一天。。不知道为啥昨天啥都不想干。。昨天把yys也删了,超鬼王真的肝不动了。。

加油,第二十二天了,早日跳槽!!!

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

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

相关文章

算法练习Day20 (Leetcode/Python-回溯算法)

虽然看似进入了一个新章节&#xff0c;但其实还是前几天二叉树章节的延续。。 回溯算法 &#xff08;以下内容摘抄自代码随想录&#xff09;&#xff1a; 回溯法解决的问题都可以抽象为树形结构&#xff0c;是的&#xff0c;我指的是所有回溯法的问题都可以抽象为树形结构&…

云原生Kubernetes:K8S集群版本升级(v1.22.14 - v1.23.14)

目录 一、理论 1.K8S集群升级 2.环境 3.升级集群&#xff08;v1.23.14&#xff09; 4.验证集群&#xff08;v1.23.14&#xff09; 二、实验 1. 环境 2.升级集群&#xff08;v1.23.14&#xff09; 2.验证集群&#xff08;v1.23.14&#xff09; 一、理论 1.K8S集群升级 …

详解视频美颜SDK:算法优化与性能提升

众所周知&#xff0c;视频美颜SDK的算法优化和性能提升至关重要。下文小编将与大家深度探讨视频美颜SDK的算法原理&#xff0c;以及近期的性能优化措施。 一、常见用法 视频美颜SDK对人脸进行识别&#xff0c;并附加适当的美颜效果。例如&#xff1a; 1.识别、关键点 2.肤色…

modbus-tcp-rtu协议图表

MODBUS TCP 读寄存器 请求 序号 意义 所占字节 字节存放格式 1 事务处理标识 2个字节 高字节在前 2 协议标识 2个字节 高字节在前 3 长度 2个字节 高字节在前 4 单元标识 1个字节 0x00-0xff 5 功能码 1个字节 0x03 6 起始寄存器地址 2个字节 高字节…

flutter项目从创建到运行,以及一些常用的命令

# 创建项目 命令行 flutter create flutter_app &#xff08;这种vsCode软件可用&#xff09; 按下ctrlshiftp&#xff0c; 输入 Flutter: New Project 选择 Application 选择项目存放位置 输入项目名字 点击 enter 完成创建 # 运行项目 1、命令行中运行&#xff1a; cd flutte…

GLES学习笔记---OpenGL绘制到ImageReader

一、ImageReader简介 ImageReader 之前经常使用在camera应用里面&#xff0c;创建一个ImageReader&#xff0c;然后获取surface&#xff0c;配流和下发request时候将surface下发给framework&#xff0c;中间具体对ImageReader做了什么没有具体研究过&#xff0c;等到Hal层came…

MYSQL数据库的备份与恢复-数据库实验七

一、实验目的 1. 了解备份和恢复的基本概念。 2. 掌握使用MySQL命令进行数据库备份的操作方法。 3. 掌握使用MySQL命令进行数据库恢复的操作方法。 二、实验内容 1. 使用mysqldump命令备份数据库studentsdb的所有表&#xff0c;存于D:\下&#xff0c;文件名为all_tables.s…

C#与php自定义数据流传输

C#与php自定义数据流传输 介绍一、客户端与服务器数据传输流程图客户端发送数据给服务器&#xff1a;服务器返回数据给客户端&#xff1a; 二、自定义数据流C#版本数据流PHP版本数据流 三、数据传输测试1.在Unity中创建一个C#脚本NetWorkManager.cs2.服务器www目录创建StreamTe…

Java基础知识:单元测试和调试技巧

在Java编程中&#xff0c;单元测试和调试是提高代码质量和开发效率的重要环节。通过单元测试&#xff0c;我们可以验证代码的正确性&#xff0c;而调试则帮助我们找出并修复代码中的错误。本文将介绍Java中的单元测试和调试技巧&#xff0c;并提供相关示例代码&#xff0c;帮助…

华清远见嵌入式学习——ARM——作业4

作业要求&#xff1a; 代码运行效果图&#xff1a; 代码&#xff1a; do_irq.c: #include "key_it.h" extern void printf(const char *fmt, ...); unsigned int i 0;//延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j);} }void do_i…

基于AR+地图导航的景区智慧导览设计

随着科技的飞速发展&#xff0c;智慧旅游已经成为现代旅游业的一个重要趋势。在这个背景下&#xff0c;景区智慧导览作为智慧旅游的核心组成部分&#xff0c;正逐渐受到越来越多游客的青睐。本文将深入探讨地图导航软件在景区智慧导览中的应用&#xff0c;并分析其为游客和景区…

【JavaWeb学习笔记】18 - 文件上传下载

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/fileupdown 目录 文件上传 一、基本介绍 二、文件上传的基本原理 ​编辑 三、文件上传应用实例 四、文件上传的注意细节 1.解决中文乱码问题 2.分割文件夹 3.防止重名 4.百度WebUploader 5.空…

redis 从0到1完整学习 (七):ZipList 数据结构

文章目录 1. 引言2. redis 源码下载3. zipList 数据结构3.1 整体3.2 entry 数据结构分析3.3 连锁更新 4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&am…

常用API:Object

Object Object类的作用&#xff1a; Object类是Java中所有类的祖宗类&#xff0c;因此&#xff0c;Java中所有的对象都可以直接使用Object类中提供的一些方法。 Object类的常见方法 方法名说明public String toString&#xff08;&#xff09;返回对象的字符串表示形式publi…

Vue 3 表单处理精讲:打造响应式注册表单的艺术

&#x1f9d9;‍♂️ 诸位好&#xff0c;吾乃诸葛妙计&#xff0c;编程界之翘楚&#xff0c;代码之大师。算法如流水&#xff0c;逻辑如棋局。 &#x1f4dc; 吾之笔记&#xff0c;内含诸般技术之秘诀。吾欲以此笔记&#xff0c;传授编程之道&#xff0c;助汝解技术难题。 &…

kubernetes -pod 实践

一、资源与对象 1、pod 容器都是由镜像启动的,但在容器外面会包裹通过Pod将容器包裹起来这个是K8s的概念,在这个Pod里面可以有一个或多个容器,那这个Pod的有什么特征呢 Pod里的所有容器都会调度在同一个节点上运行0。Pod中的所有容器会共享同一网络,它们有一个唯一的IP,…

PDF编辑工具--Acrobat Pro DC 2023中文

Acrobat Pro DC 2023是一款功能强大的PDF编辑和管理软件&#xff0c;它可以帮助用户在创建、编辑、转换和共享PDF文档方面达到前所未有的高度。这款软件提供了丰富的编辑功能&#xff0c;使用户能够轻松添加注释、高亮、下划线、插入文本等&#xff0c;自由地编辑PDF文档。除了…

LeetCode 每日一题 Day 23 || 简单数学题

1276. 不浪费原料的汉堡制作方案 圣诞活动预热开始啦&#xff0c;汉堡店推出了全新的汉堡套餐。为了避免浪费原料&#xff0c;请你帮他们制定合适的制作计划。 给你两个整数tomatoSlices和 cheeseSlices&#xff0c;分别表示番茄片和奶酪片的数目。不同汉堡的原料搭配如下&am…

枚举的使用

背景以及定义 枚举是在jdk1.5以后引入的.主要用途是:将常量组织起来,在这之前表示一组常量通常使用定义常量的方式: public static final int RED 1; public static final int GREEN 2; public static final int BLUE 3; 但是常量举例有不好的地方,例如:可能碰巧有一个数字…

Leetcode 2972. Count the Number of Incremovable Subarrays II

Leetcode 2972. Count the Number of Incremovable Subarrays II 1. 解题思路2. 代码实现 题目链接:2972. Count the Number of Incremovable Subarrays II 1. 解题思路 这道题需要注意的是&#xff0c;题目要求只能删除一个连续子串&#xff0c;使得剩余的元素变成一个递增…