- 博客(50)
- 收藏
- 关注
原创 leetcode 24. 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
2025-01-14 18:00:11
369
原创 leetcode 206. 反转链表
递归法:递归法相对抽象一些,但是其实和双指针法是一样的逻辑,同样是当cur为空的时候循环结束,不断将cur指向pre的过程。最后,cur 指针已经指向了null,循环结束,链表也反转完毕了。接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此时已经反转了第一个节点了。首先定义一个cur指针,指向头结点,再定义一个pre指针,初始化为null。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]
2025-01-10 15:46:31
265
原创 leetcode 203. 移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。输入:head = [1,2,6,3,4,5,6], val = 6。输入:head = [7,7,7,7], val = 7。输入:head = [], val = 1。输出:[1,2,3,4,5]
2025-01-09 16:08:28
329
原创 leetocode 59. 螺旋矩阵 II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。输出:[[1,2,3],[8,9,4],[7,6,5]]可以发现这里的边界条件非常多,处理时要遵循。由外向内一圈一圈这么画下去。
2025-01-04 15:51:31
216
原创 leetcode 209. 长度最小的子数组
初始化子数组的最小长度为无穷大,枚举数组 nums 中的每个下标作为子数组的开始下标,对于每个开始下标 i,需要找到大于或等于 i 的最小下标 j,使得从 nums[i] 到 nums[j] 的元素和大于或等于 s,并更新子数组的最小长度(此时子数组的长度是 j−i+1)输入:target = 11, nums = [1,1,1,1,1,1,1,1]输入:target = 7, nums = [2,3,1,2,4,3]输入:target = 4, nums = [1,4,4]
2025-01-02 15:05:51
162
原创 leetcode-双指针专题
然后返回 nums 中与 val 不同的元素的数量。解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。解释:你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。输入:nums = [0,1,2,2,3,0,4,2], val = 2。你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。输入:nums = [3,2,2,3], val = 3。输出:5, nums = [0,1,4,0,3,输出:2, nums = [2,2,
2024-12-26 14:34:57
306
原创 leetcode 704. 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。输入: nums = [-1,0,3,5,9,12], target = 9。输入: nums = [-1,0,3,5,9,12], target = 2。解释: 9 出现在 nums 中并且下标为 4。解释: 2 不存在 nums 中因此返回 -1。
2024-12-23 14:50:53
237
原创 leetcode 118. 杨辉三角
3、每个数字等于上一行的左右两个数字之和,可用此性质写出整个杨辉三角。即第 n 行的第 i 个数等于第 n−1 行的第 i−1 个数和第 i 个数之和。给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。1、第 n 行(从 0 开始编号)的数字有 n+1 项。在「杨辉三角」中,每个数是它左上方和右上方的数的和。2、每行第一个数和最后一个数为1。
2024-12-21 14:54:12
313
原创 leetcode 108. 将有序数组转换为二叉搜索树
直观地看,我们可以选择中间数字作为二叉搜索树的根节点,这样分给左右子树的数字个数相同或只相差 1,可以使得树保持平衡。如果数组长度是奇数,则根节点的选择是唯一的,如果数组长度是偶数,则可以选择中间位置左边的数字作为根节点或者选择中间位置右边的数字作为根节点,选择不同的数字作为根节点则创建的平衡二叉搜索树也是不同的。确定平衡二叉搜索树的根节点之后,其余的数字分别位于平衡二叉搜索树的左子树和右子树中,左子树和右子树分别也是平衡二叉搜索树,因此可以通过递归的方式创建平衡二叉搜索树。
2024-12-20 12:04:36
289
原创 leetcode 66. 加一
题目:给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。输入:digits = [4,3,2,1]输入:digits = [1,2,3]加 1 得到了 9 + 1 = 10。解释:输入数组表示数字 4321。解释:输入数组表示数字 123。输入:digits = [9]因此,结果应该是 [1,0]。解释:输入数组表示数字 9。输出:[4,3,2,2]输出:[1,2,4]
2024-12-18 18:01:32
399
原创 数据结构 ——前缀树查词典的实现
下面是利用前缀树在一个给定的文件log.txt,来实现一个简单的查词典功能。插入key:ant过程,查找单词同插入差不多。插入key:donkey。关于指针数组的一点理解。二、查词典的代码实现。
2024-12-14 16:41:05
413
原创 数据结构 ——二叉树转广义表
实现过程:先拿到表的第一个字符,判断是不是(,是的话继续拿第二个字符,不是)的话,则为根节点,保存该根节点数据;继续左右子树的递归存值,读完左右子树后,继续读最后一个),递归结束,返回这棵树。root=(c(a()(b()()))(e(d()())(f()(j(h()())())))) (跟(左子树)(右子树))假设广义表为 (c(a()(b()()))(e(d()())(f()(j(h()())())))) 画出该二叉树。如下一棵树,转换为广义表。2、根据广义表画出二叉树。
2024-12-13 14:49:14
572
原创 数据结构 ——平衡二叉树
删除逻辑:要明白指针的含义,存放的是变量的地址,如下图片为删除id为3后,由于无左孩子,右孩子直接顶替上来的示意图。以下代码包括二叉树的创建,平衡过程,遍历:前序、中序、后序和按层遍历,画图和销毁等操作。左旋:右子树重,当前节点的右孩子成为新的根节点,旧根节点连到新根节点的最左的左子树上。右旋:左子树重,当前节点的左孩子成为新的根节点,旧根节点连到新根节点的最右的右子树上。如下为一颗不平衡的二叉排序树,通过左旋和右旋操作转换为平衡二叉树的过程。1、平衡二叉树的定义:任意节点的子树的高度差都小于等于 1。
2024-12-12 19:08:51
1006
原创 数据结构 ——树状存储的实现
先序遍历(前序遍历):先访问根节点,然后递归地先序遍历左子树,最后递归地先序遍历右子树。按层遍历:从树的根节点开始,逐层遍历树中的所有节点。这种遍历方式也称为广度优先遍历。中序遍历:先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。后序遍历:先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。下面是以递归的思想来构建和遍历一颗二叉树。先序和中序 /中序和后序 能确定一颗树。下面为各种遍历示意图。
2024-12-12 16:11:07
489
原创 数据结构 ——数状存储的基本概念
计算一个节点的深度,从根节点算起(从1开始计数),到该节点所经过的节点数(包括此节点)为树的深度,如下图,D的深度为3,G为4。二叉树是一种特殊的树形结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。:利用链表存储二叉树。每个节点使用一个结构体表示,结构体包含数据域和两个指针域,分别指向左子节点和右子节点。:利用数组存储二叉树。通常按层次顺序存储,从根节点开始,依次存入数组的相应位置。一、树状存储基本概念。
2024-12-09 14:47:54
301
原创 顺序栈的应用 ——计算器
2.根据输入的表达式,判断数字和运算符,各自放入对应栈中。其中对于运算符的判断如下:如果一开始运算符栈为空或者遇到( 左括号优先级最高,直接压入栈中;* 则要判断优先级是否比当前栈顶高,高的话直接入栈,低或者等于则先把运算符栈和数字栈弹出计算,直到运算符栈为空或大于当前栈顶优先级,就入栈;思路:1.可以使用顺序栈实现,先创建两个顺序栈sop(存放运算符,如()、+、-、最后是) ,右括号不入栈,此时要运算符栈和数字栈要出栈并计算,直到遇到左括号为止。、/)和snum(存放数字)。
2024-12-05 16:30:21
544
原创 数据结构 ——链式队列
链式队列是通过链表实现的一种队列,它将队列的元素通过指针连接起来。链式队列不需要预先分配固定大小的存储空间,因此可以动态增长,更加灵活。下面是基于变长结构体的双循环链表库进行封装实现链式队列的基本操作,以工程的形式记录。
2024-12-04 10:12:20
296
原创 无头循环单链表的应用 ——约瑟夫问题
思路:可以使用无头节点循环单链表实现(有头结点的话每次循环要判断该头结点,造成干扰)n个人围成一圈,1开始数,数到3就出列,找到最后留下来的人。2、无头循环单链表示意图。
2024-12-03 16:32:28
168
原创 带头单链表应用 ——多项式合并
思路:可以抽象成两个单链表,从头开始比较两个数据域(系数和x的项数),选定其中一个单链表为合并的新链。数据域小的保留下来,如果同系数则相加(若相加为0,则不需要链接该节点),依次遍历。如:p1:5+2x+8x^8 +3x^16。1、用带头结点的单链表实现多项式的合并。
2024-12-03 16:01:58
157
原创 数据结构 ——无头单链表
无头单链表省去了传统单链表头节点的存储空间,这使得在某些情况下可以更高效地使用内存。它直接通过头指针访问第一个数据节点,便于快速迭代整个链表,但同时也意味着在进行某些操作时,如获取链表长度,需要额外的遍历计数步骤。单链表是一种常见的基础数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。无头单链表是单链表的一种变体,其特点是没有明确的头节点,链表的第一个数据节点直接跟在头指针之后。一、无头单链表的定义与特性。1.2 无头单链表的特点。1、无头单链表示意图。
2024-12-03 11:47:07
299
原创 数据结构 ——顺序队列
需要附设两个指针:队头指针(front)和队尾指针(rear),分别指向队头元素和队尾元素。队列(queue)是只允许在一端进行插入操作,在另一端进行删除操作的线性表,简称“队”。允许插入的一端称为队尾(rear),允许删除的一端称为队头(front)。用一组地址连续的存储单元,依次存放从队头到队尾的数据元素,称为顺序队列。向队列中插入新的数据元素称为入队,新入队的元素就成为了队列的队尾元素。从队列中删除队头元素称为出队,其后继元素成为新的队头元素。队列的头尾相接的顺序存储结构称为循环队列。
2024-12-03 10:42:24
365
原创 数据结构 ——链式存储栈
链式栈是一种数据存储结构,可以通过单链表的方式来实现,使用链式栈的优点在于它能够克服用数组实现的顺序栈空间利用率不高的特点,但是需要为每个栈元素分配额外的指针空间用来存放指针域。调用封装的双循环链表的库进行实现,以工程的形式记录。
2024-12-02 16:07:47
274
原创 数据结构 ——循环双链表的封装3-隐藏结构体
一、下面是基于变长结构体的循环双链表进行进一步封装,将结构体进行隐藏封装的实现,以项目工程的形式记录。
2024-12-01 17:48:02
136
原创 循环双链表封装成类的实现
面向对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。对象即为人对各种具体物体抽象后的一个概念,人们每天都要接触各种各样的对象,如手机就是一个对象。下面是采用面向对象的思想,将前面的循环双链表封装成类的实现。以项目工程的形式记录。
2024-12-01 17:39:45
192
原创 数据结构 ——循环双链表—变长结构体的使用
如果你直接使用指针而不使用数组,那么,你在分配内存缓冲区时,就必须分配结构体一次,然后再分配结构体内的指针一次,(而此时分配的内存已经与结构体的内存不连续了,所以要分别管理即申请和释放)。概念:变长结构体是由gcc扩展的一种技术,它是指其最后一个成员的长度不固定(flexible array member,也叫柔性数组)。应用: Socket通信数据包的传输、解析数据包、其他可以节省空间,连续存储的地方等。下面是基于循环双链表的基础上,使用变长结构体,以项目工程的形式记录。
2024-12-01 16:09:38
239
原创 数据结构 ——带头循环双链表
包含指向其前一节点以及下一节点的指针。循环双向链表在任何节点中都不包含NULL。链表的最后一个节点包含列表的第一个节点的地址。链表的第一个节点还包含的前一个指针是指向最后一个节点的地址。以下为一个通用带头结点的循环双链表的基本操作实现,以项目工程的形式记录。1、下面为项目工程使用到的带头循环双链表的示意图。2、头插和尾插示意图。3、基本操作代码实现。
2024-11-30 23:58:37
204
原创 数据结构 ——带头单链表
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:数据域(数据元素的映象) + 指针域(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。下面为单链表的基本操作实现,以项目工程的形式记录。二、单链表的基本操作。
2024-11-29 14:14:36
273
原创 数据结构 ——顺序表
定义:顺序表是一种线性表的存储结构,它用一组地址连续的存储单位依次存储线性表中的数据元素。从而使得逻辑上相邻的两个元素在物理位置上也相邻。以下为顺序表的基本操作实现,以项目工程的形式记录。二、顺序表的基本操作。
2024-11-28 15:45:07
232
原创 数据结构 ——顺序栈
顺序栈(也称为数组栈)是一种基于数组实现的栈数据结构。栈是一种“后进先出”(Last In First Out, LIFO)的数据结构,最后一个进入的元素最先被取出。顺序栈就是使用一个数组来存储元素的栈,它遵循栈的特性。在顺序栈中,我们将数组的第一个索引(位置0)作为栈顶,最后添加(push)的元素将放在数组的最后一个索引位置,而弹出(pop)操作则从数组的第一个索引位置开始。下面为一个顺序栈的简单操作实现,包括创建、判空、入栈、出栈、获取栈顶元素、遍历和销毁,以项目工程的形式记录。
2024-11-27 10:38:14
498
原创 Linux编程
编程实现一个简单的迷你型操作系统文件管理功能模块,基本功能包括:(1) 显示系统当前用户,当前工作目录。(2) 显示指定文本文件的内容,文件名称由键盘输入。(功能类似命令 cat aa.txt )(3) 显示指定文件的名称,大小,权限等信息,文件名称由键盘输入。(功能类似命令 ls –l aa.txt )(4) 文件复制功能,源文件,目标文件名均由键盘输入(功能类似命令cp aa.txt bb.txt )(5)创建文件功能(文本文件)(功能类似命令touch aa.txt )#incl
2021-12-23 22:46:03
592
原创 什么是浏览器跨域访问操作,js如何实现
浏览器从一个域名的网页去请求一个域名的资源时,域名、端口、协议任一不同,都是跨域。三种方法实现js跨域访问:1.基于iframe实现跨域。基于iframe跨域要求两个页面必须属于一个基础域,使用同一协议和同一端口。2.基于script标签实现跨域。通过动态创建script标签就可以加载其它域的js文件,然后通过本页面就可以调用加载后js文件的函数,这样做的缺陷就是不能加载其它域的文档,只能是js文件,jsonp便是通过这种方式实现的,jsonp通过向其它域传入一个callback参数,通过其他域的后台
2021-11-27 19:30:00
240
原创 JavaScript在发送Ajax请求时,URL的域名地址是使用绝对地址还是相对地址?
Ajax技术使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。无论是使用相对地址还是绝对地址发送Ajax请求都是可以的,两者在发送请求时,服务器访问的地址都会转化为绝对地址。...
2021-11-26 10:30:00
132
原创 软件全面质量管理的思想体系
软件全面质量管理软件全面质量管理以软件产品质量为核心,建立起一套科学严密高效的质量体系,以提供满足用户需要的产品或服务的全部活动。以质量为中心,以全员参与为基础,目的在于通过顾客满意和本组织所有成员及社会受益而达到长期成功的管理途径。在全面质量管理中,质量这个概念和全部管理目标的实现有关。全面质量管理蕴涵如下含义强烈关注顾客.从现在和未来的角度看,顾客已成为企业的衣食父母。“以顾客为中心”的管理模式正逐渐受到企业的高度重视。全面质量管理注重顾客价值,其主导思想就是“顾客的满意和认同是长期赢得市场,
2021-11-25 11:30:00
137
原创 CMM和CMMI的联系及区别
联系:CMMI即CMM集成,是系统工程和软件工程的集成成熟度模型,CMMI更适合于信息系统集成企业。CMMI是在CMM基础上发展起来的,它继承并发扬了CMM的优良特性,借鉴了其他模型的优点,融入了新的理论和实际研究成果。它不仅能够应用在软件工程领域,而且可以用于系统工程及其他工程领域。区别:从等级划分上看,1,3,5级的名称没有变化,均是初始级,已定义和优化;但是2级和4级分别定义为已管理级和定量管理级,这个变化更突出了CMMI定性管理和定量管理的特点.CMMI共有分属于4个类别的25个过程哉,覆盖
2021-11-24 08:30:00
855
原创 可靠性指标中MTTF MTBF MTTR
可靠性指标中MTTF MTBF MTTR对于不可修复系统, 系统的平均寿命指系统发生失效前的平均工作(或存储) 时间或工作次数, 也称为系统在失效前的平均时间, 记为MTTF (meantime to failure)。对于可修复系统, 系统的寿命是指两次相邻失效(故障) 之间的工作时间, 而不是指整个系统的报废时间。平均寿命即是平均无故障时间, 也称为系统平均失效间隔, 记为MTBF (mean time between failure)。可修复产品的平均修复时间, 就是从出现故障到修复中间的这段时
2021-11-23 20:03:46
2036
原创 2021-10-22
Smoke Test (冒烟测试)在软件行业,冒烟测试描述的是将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程,即用来确定更改后的代码会按照预期进行并且不会破坏整个版本的稳定性。冒烟测试可以经济有效地确定和修复软件缺陷。实施为:测试人员在正式测试之前先跑一下主流程,没问题了在进行其他测试工作。冒烟测试的对象是每个新编译的需要正式测试的软件版本,目的是确认软件基本功能正常,执行者是版本的编译人员。不通过时需要重新编译,到成功为止。Ad-hoc Test“Ad-Hoc” 原意是指 “特定的,一次
2021-10-22 15:57:11
71
原创 2021-10-22
内置对象session与httpSession对象是同一个东西么内置对象session与httpSession对象是同一个东西。1.在jsp中或者是在servlet中session对象使用方法一样,而且放在session中的数据都是保存在服务器端的。2.session对象是httpSession类的实例。内置对象session:session对象是一个jsp内置对象,session对象指的是客户端与服务器端的一次会话:从客户端连到服务器端的一个Web应用程序开始,直到客户端与服务器端断开为止。即服
2021-10-22 15:41:28
73
原创 2021-09-19
图灵测试图灵测试是指测试者在与被测试者(一个人和一台机器)隔开的情况下,通过一些装置(如键盘)向被测试者随意提问。进行多次测试后,如果有超过30%的测试者不能确定出被测试者是人还是机器,那么这台机器就通过了测试,并被认为具有人类智能。图灵测试一词来源于计算机科学和密码学的先驱阿兰·麦席森·图灵写于1950年的一篇论文《计算机器与智能》,其中30%是图灵对2000年时的机器思考能力的一个预测,目前我们已远远落后于这个预测。...
2021-09-19 20:23:11
63
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人