一周学习总结:数组与链表

学习内容:数组与链表、计算机网络知识

数组:

从数组的基础知识到相关应用
数组的基础知识:数组在内存中的存储、数组的相关操作(获取与更新)、数组的相关应用:

二分查找法⭐⭐⭐⭐⭐

● 掌握左闭右闭的循环条件和处理条件: 当left = 0, right = n - 1的时候因为right这个值我们在数组中可以取到,while(left <= right) 是正确写法 主要看能不能取到这个值,关于mid:每次取mid加减一即可
● 二分的最大优势是在于其时间复杂度是O(logn),因此看到有序数组都要第一时间反问自己是否可以使用二分。
● 关于二分mid溢出问题解答:
○ mid = (l + r) / 2时,如果l + r 大于 INT_MAX(C++内,就是int整型的上限),那么就会产生溢出问题(int类型无法表示该数)
○ 所以写成 mid = l + (r - l) / 2或者 mid = l + ((r - l) >> 1) 可以避免溢出问题

移除元素⭐⭐⭐⭐⭐

● 掌握双指针处理数组的思想:利用快慢指针解题,fast找非删除元素的值,slow记录非删除元素的值(即新数组中需要存储的元素)
● 双指针与暴力破解:双指针对于暴力破解上是使用空间换时间。
● fast < nums.size() 和 fast <= nums.size()-1 没什么区别,那为什么第二个会在空数组时报数组越界的错误?
vector的size()函数返回值是无符号整数,空数组时返回了0,再减个一会溢出

有序数组的平方排序⭐⭐⭐⭐

● 掌握使用双指针(快慢指针)+滑块思想:快指针的移动条件:慢指针到快指针范围内元素和小于或大于等于目标元素;慢指针移动条件:慢指针到快指针范围内元素之和大于等于或小于目标元素,且每次需要记录慢指针到快指针的元素个数并进行判断,取最小或最大长度即可(即数组序列长度)。
● 双指针和滑动窗口有什么区别
滑动窗口也是基于双指针完成的,但滑动窗口是会连续处理某一种情况。具体区别:
因为两头指针走完相当于最多只把整个数组遍历一遍,会漏掉很多情况。滑动窗口实际上是双层遍历的优化版本,而双指针其实只有一层遍历,只不过是从头尾开始遍历的。
滑动窗口的原理是右边先开始走,然后直到窗口内值的总和大于target,此时就开始缩圈,缩圈是为了找到最小值,只要此时总和还大于target,我就一直缩小,缩小到小于target为止在这过程中不断更新最小的长度值,然后右边继续走,如此反复,直到右边碰到边界。这样就保证了可以考虑到最小的情况

螺旋矩阵II⭐⭐⭐⭐

● 关于offset不太好理解:offset的意义在于 结束一圈后 起始位置向后移 结束位置向前移。可以画和n=4或者n=5的矩阵,会比较好理解。offset就是由于要去更向内的一圈,内圈元素更少的地方循环,所以循环的次数变少了

相关题目:

704. 二分查找、27. 移除元素
977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

链表

从链表的相关知识到相关应用
链表的急促知识:链表的存储、分类、如何定义、链表的操作(查找节点、更新节点)、给出一个数组如何转化陈链表

移除链表元素⭐⭐⭐⭐

●引入虚拟头节点:虚拟头结点的主要目的是为了避免对头结点的特殊处理;这个处理就指的是修改操作,查询操作使用于不适用虚拟头节点没啥区别
●修改链表时需要判断移动元素后是否会出现空指针异常的情况
● 空针异常优先在节点前debug判断一下是否为null来定位!
● 关于递归来做这道题 可以看看这边博客的思维:https://lyl0724.github.io/2020/01/25/1/

设计链表⭐⭐⭐⭐⭐

● 该题目主要考察链表的所有相关知识,如链表的插入数据、获取数据、删除数据的相关操作,因此这道题目的重要程度为⭐⭐⭐⭐⭐
● 题目中需要引入链表长度记录的变量,方便链表在进行插入和删除时进行操作

反转链表⭐⭐⭐⭐⭐

● 反转操作时一定要记录待断指针所执行的节点,以防后续节点丢失
● 为什么有时候需要判定cur->next !=nullptr 有时候又不需要 只用判断cur!=nullptr呢?
其实这个要看场景,一般就是看你如果不判断的话会不会导致空指针异常,因为如果你的指针遍历到null还调用它的属性或方法肯定就会报错的,但是有时候的情况不会遍历到cur->next,所以要看具体情况。

两两交换链表中的节点 ⭐⭐⭐⭐

本题难点在于:

  1. while循环条件
  2. 使用两个临时节点指向待断指针指向的节点
  3. https://lyl0724.github.io/2020/01/25/1/ 里面有递归的题解 很好的博客

删除链表的倒数第N个节点⭐⭐⭐⭐⭐

● 掌握了删除倒数第n个元素时如何引入双指针进行解决
难点在于:要使得慢指针指向待删除节点的上一个节点

链表相交⭐⭐⭐⭐

理解节点和节点值的区别: 节点是一个实例 占用一块空间 值只是它的成员变量 值怎样和节点本身没有任何关系 一个实例只由它的地址唯一确定
思路:使得两个链表尾部对齐,在进行查找

环形链表II⭐⭐⭐⭐

利用数学和物理知识进行解决,善于发现和总结
本体理解上需要手动模拟进行总结其中的规律

相关题目:

203.移除链表元素 、707.设计链表、206.反转链表
24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II

在这里插入图片描述

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

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

相关文章

2024第16届四川教育后勤装备展6月1日举办 欢迎参观

2024第16届四川教育后勤装备展6月1日举办 欢迎参观 邀请函 主办单位&#xff1a; 中国西部教体融合博览会组委会 承办单位&#xff1a;重庆港华展览有限公司 博览会主题&#xff1a;责任教育 科教兴邦 组委会&#xff1a;交易会159交易会2351交易会9466 展会背景 成都…

[报告购买] 2021新版知识付费行业报告-艾媒咨询,教育产品运营体系下,如何利用平台寻找私域流量的出路?

对教育机构来说&#xff0c;现在既是一个流量充沛的时代&#xff0c;又是一个流量稀缺的时代。互联网环境下&#xff0c;各平台流量数以亿计&#xff0c;为了获客&#xff0c;各教育品牌机构投放、冠名、代言、竞价已成常态化&#xff0c;公域平台的流量争夺如火如荼。 一轮一轮…

Spring之bean的细节(创建方式、作用范围、生命周期)

在Spring框架中&#xff0c;Bean是一个非常重要的概念&#xff0c;它代表了应用程序中需要被管理的对象。关于Bean的细节&#xff0c;我们可以从创建方式、作用范围以及生命周期三个方面进行阐述。 创建方式 Spring支持以下三种方式创建Bean&#xff1a; 调用构造器创建Bean…

Chatgpt教你使用Python开发iPhone风格计算器

上次使用Chatgpt写爬虫&#xff0c;虽然写出来的代码很多需要修改后才能运行&#xff0c;但Chatgpt提供的思路和框架都是没问题。 这次让Chatgpt写一写GUI程序&#xff0c;也就是你常看到的桌面图形程序。 由于第一次测试&#xff0c;就来个简单点的&#xff0c;用Python写用…

GPU Burn测试指导

工具下载链接&#xff1a; https://codeload.github.com/wilicc/gpu-burn/zip/master测试方法&#xff1a; 上传工具到操作系统下&#xff0c;解压缩工具&#xff0c;使用make命令完成编译&#xff08;确保cuda环境变量已经配置成功、 nvcc -v能显示结果&#xff09;。 如果安…

文献速递:多模态深度学习在医疗中的应用--多模式婴儿脑分割技术:模糊引导深度学习

Title 题目 Multimodal Infant Brain Segmentation by Fuzzy-informed Deep Learning 多模式婴儿脑分割技术&#xff1a;模糊引导深度学习 01 文献速递介绍 日益普及的非侵入式婴儿脑磁共振图像&#xff08;MRI&#xff09;为准确理解脑主要发展轨迹的动态性提供了机会&…

树莓派|串口通信协议

1、串口通信原理 串口通讯(Serial Communication)&#xff0c;是指外设和计算机间&#xff0c;通过数据信号线、地线等&#xff0c;按位进行传输数据的一种通讯方式。串口是一种接口标准&#xff0c;它规定了接口的电气标准&#xff0c;没有规定接口插件电缆以及使用的协议。串…

Flutter 中的 SwitchListTile 小部件:全面指南

Flutter 中的 SwitchListTile 小部件&#xff1a;全面指南 在Flutter的Material组件库中&#xff0c;SwitchListTile是一个包含开关&#xff08;Switch&#xff09;的列表项&#xff0c;非常适合用来创建带有标题、副标题以及开关的列表项&#xff0c;常用于设置界面&#xff…

图的遍历最小生成树问题

遍历和最小生成树是图论中常见的问题。下面我将分别介绍如何在 Java 中实现图的遍历和最小生成树算法&#xff0c;包括深度优先搜索&#xff08;DFS&#xff09;、广度优先搜索&#xff08;BFS&#xff09;以及最小生成树算法之一的Prim算法。 1. 图的遍历 a. 深度优先搜索&a…

“ModuleNotFoundError: No module named ‘selenium‘”报错如何解决

接上节&#xff1a;测试平台开发之测试框架改造并发执行及结果隔离(1) 上节博客的末尾提到&#xff1a;在命令窗口执行python main.py 可是执行的时候遇到了如下报错&#xff1a; ERRORS _____________________________________________________________ ERROR collecting te…

如何安全高效地进行4S店文件分发,保护核心资产?

4S店与总部之间的文件分发是确保双方沟通顺畅、信息共享和决策支持的重要环节。4S店文件分发涉及到以下文件类型&#xff1a; 销售报告&#xff1a;4S店需要定期向总部提交销售报告&#xff0c;包括销售数量、销售额、市场份额等关键指标。 库存管理文件&#xff1a;包括车辆库…

使用docker创建hadoop集群:Couldn‘t upload the file

运行的环境; Windows10 Docker Desktopdocker-hadoop 出现的问题如下: 解决方法 https://github.com/big-data-europe/docker-hadoop/issues/98

Unity Pixels Per Unit 与 Sprite Renderer Scale的逻辑关系,为什么平铺的Sprite Renderer会变形?

SpriteRenderer之前用的比较基础&#xff0c;没遇到过什么问题&#xff0c;这几天使用SpriteRenderer的平铺时发现平铺变形了&#xff0c;研究了一下&#xff0c;原来有这么多在逻辑在里面。 当我们导入图片选择Texture Type为Sprite时表示我们的图片用途是UI或者SpriteRendere…

【go项目01_学习记录12】

代码组织 1 代码结构2 重构与测试2.1 安装测试功能2.2 testify 的常用断言函数 3 表组测试 1 代码结构 所有的代码写在一个main.go文件里面&#xff0c;GO编译器也是可以正常执行的。但是当代码量很庞大时&#xff0c;很难进行维护。 Go Web 程序的代码组织 单文件——反模式…

C语言笔记15

指针2 1.数组名的理解 int arr[ 10 ] { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 }; int *p &arr[ 0 ];17391692786 arr是数组名&#xff0c;数组名是首元素地址&#xff0c;&arr[0]就是取出首元素的地址放在指针变量p中。 #include <stdio.h> int main()…

基于GWO灰狼优化的CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 GRU网络 4.3 注意力机制&#xff08;Attention&#xff09; 4.4 GWO优化 5.算法完整程序工程 1.算法运行效果图预览…

C++初探_友元类

1.友元类 代码&#xff1a; #include <iostream> class Tv { public:friend class Remote;... };class Remote {... }; 2.友元成员函数 即&#xff1a;不需要整个类成为友元&#xff0c;只需要选择让特定的类成员成为另一个类的友元&#xff1a; &#xff08;1&…

logback 日志脱敏

工具类 CustomLogbackPatternLayoutEncoder.java import ch.qos.logback.classic.encoder.PatternLayoutEncoder;public class CustomLogbackPatternLayoutEncoder extends PatternLayoutEncoder {/*** 正则替换规则*/private LogbackReplaces replaces;/*** 使用自定义 MyLog…

图的拓扑序列(DFS1)

way&#xff1a;在图里面能延伸的越远&#xff0c;deep越大&#xff0c;说明它能从自己延伸很长到别的节点&#xff08;别的节点一定有入度&#xff09;&#xff0c;它越可能没有入度。 #include<iostream> #include<vector> #include<map> #include<set…

ChatGlm的部署和训练

一、chatGlm的环境部署 1.安装anocoda 下载安装anaconda。具体教程详见官网教程。 2.安装CUDA 1&#xff09;首先在终端查看你的Nividian版本&#xff0c;命令如下&#xff1a; 2)如果你没有下载你要去下载cuda下载网站&#xff0c;这里是12.3是因为我cuda version版本12…