- 博客(26)
- 收藏
- 关注
原创 leetcode(5)
二叉树的直径可能不会经过根节点,不能直接将根的左子树最大高度+右子树最大高度,还要比较最大直径和当前直径。要想时间复杂度为o(n), 遍历一遍链表就是o(n),将链表放到数组中看是否是回文,加起来还是o(n)每次将节点放入队列中,计算队列长度,队列头弹出当前队列节点,并依次将节点的左右节点放入队列中。链表查询时间复杂度为o(n), 数组查询时间复杂度为o(1)层次遍历类似广度优先搜索BFS,可以采用队列实现。
2024-05-13 00:20:08
236
原创 leecode(4)
遍历数组,设置局部最大和和全局最大和,当前局部最大和=max(当前遍历的数,当前遍历的数+局部最大和),因为如果之前的和加上正数会更大,但是如果这个正数本身值就很大,比之前加起来的还大,那么可以从这个数开始计算。分治法的话(复杂度为o(nlogn)),需要将数组分成左边和右边两个部分,但连续数组的最大和的查找需要三个部分,完全在左边,经过中间点,完全在右边。如果节点是白色,说明没有被访问过,标记成灰色,将右节点,节点和左节点入栈。需要写2个子函数,返回三个部分的最大值和查找经过中间点的最大值。
2024-05-12 22:48:34
299
原创 Leecode(3)
左指针向右移动一位。初始化一个哈希表sum_count,存储里面所有可能的和的值(键)和它们的个数(值),初始为{0:1},因为cumulative_sum初始为0。思路: 还是用双指针,一个数组table存储t的字母出现次数,一个数组stable存储存储s的字母出现次数,count计算子串中t的字母出现次数。滑动窗口就是双指针,右指针到p的长度时停下,如果窗口中字符串和p一样,就记录左指针的位置,否则左指针右移一位。注意k可以为0,而return的count初始值如果是0的话,需要考虑避免这个0的问题。
2024-04-10 14:20:11
403
原创 leecode(2)
除了暴力解,可以用排序+双指针, k遍历数组,i=k+1,j=len(nums)-1,当和小于0说明i应该增大,和大于0说明j应该减小,时间复杂度为O(n^2)使用双指针,一个从头,一个从尾,因为两指针i,j距离越大越好,i和j数组值小的那个向中间移动一格。时间复杂度就会只有O(n)双指针,每一列找左边最大,和右边最大,左右当中的短板就是倒水的极限。使用的是两次遍历,时间复杂度是O(n^2)
2024-03-24 15:50:17
315
原创 408王道计网复习-应用层(自用)
目录客户/服务器模型P2P模型域名系统(DNS)文件传输协议FTP电子邮件万维网(www)网络应用模型:客户/服务器模型、P2P模型客户/服务器模型服务器是一个总是打开的主机,客户程序必须知道服务器程序的地址,服务器不需要知道客户程序的地址。主要特征:1. 客户是服务请求方,服务器是服务提供方。2. 整个网络的管理工作由少数服务器担当,因此网络的管理非常集中和方便。3. 客户机相互之间不直接通信。4. 可扩展性不佳,服务器支持的客户机数量有限。
2022-04-05 10:20:25
524
原创 C++牛客网编程(十五)
目录链表中环的入口结点链表中倒数最后第k个结点复杂链表的复制链表中环的入口结点给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。数据范围: n≤10000n,1<=结点值<=10000要求:空间复杂度 O(1),时间复杂度 O(n)例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。思路:a,b都从头结点开始,a每走一步,b走两步,当a和b相遇
2022-04-05 10:16:54
168
原创 408王道计网复习-传输层(自用)
目录UDPTCP拥塞控制传输层的功能:提供应用进程的逻辑通信,即端到端的通信复用和分用:复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。传输层对报文进行差错检测(首部和数据部分),网络层只检查IP数据报的首部;传输层用两种不同的传输协议TCP,和UDP,而网络层要么面向连接,要么无连接。端口:传输层服务访问点(TSAP)。数据链路层的SAP是MAC地址,网络层的SAP是IP地址,
2022-04-03 17:04:58
2406
原创 C++牛客网编程(十四)
二叉树中和为某一值的路径(三)描述:给定一个二叉树root和一个整数值 sum ,求该树有多少路径的的节点值之和等于 sum 。1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点2.总节点数目为n3.保证最后返回的路径个数在整形范围内(即路径个数小于231-1)数据范围:0<=n<=10000 −10^9<=节点值<=10^9思路:通过两个dfs对每个结点进行深度遍历class Solution {publi
2022-04-03 17:01:32
818
原创 C++牛客网编程(十三)
序列化二叉树描述:请实现两个函数,分别用来序列化和反序列化二叉树,不对序列化之后的字符串进行约束,但要求能够根据序列化之后的字符串重新构造出一棵与原二叉树相同的树。二叉树的序列化(Serialize)是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树等遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#)二叉树的反序列化(Deserialize)是指:根据某种遍历
2022-03-31 10:47:43
1171
原创 408王道计网复习-网络层(自用)
目录路由算法IPV4网络地址转换NATIPV6路由协议组播移动IP网络层设备网络互联:两个以上的计算机网络,通过一定的方法,用一种或多种通信处理设备(即中间设备)相互连接起来,以构成更大的网络系统。中继系统:1. 物理层中继系统:中继器,集线器2. 数据链路层中继系统:网桥或交换机3. 网络层中继系统:路由器4. 网络层以上的中继系统:网关网络互联通常是指路由器进行网络互联和路由选择。路由器是一台专用计算机,用于在互联网中进行路由选择。
2022-03-30 11:35:01
3827
原创 C++牛客网编程(十二)
二叉树的下一个结点描述:给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示思路:分结点类型进行讨论。如果结点有右子树,则下一个结点是右子树的最左结点;如果结点没有右子树,有父结点,则一直向上查询在父结点左子树的结点;如果是最右结点,即中序遍历最后一个,则下一个结点为空。class Solution {
2022-03-30 11:31:13
62
原创 C++牛客网编程(十)
目录判断数组是否是某二叉树的后序遍历二叉树中和为某一值的路径(一)二叉树中和为某一值得路径(二)判断数组是否是某二叉树的后序遍历描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。数据范围: 节点数量 0≤n≤10000节点上的值满足 1≤val≤1051 ,保证节点上的值各不相同要求:空间复杂度 O(n),时间时间复杂度 O(n2)提示:1.二叉搜索树是指父亲节点大于
2022-03-29 11:33:06
110
原创 C++牛客网编程(十一)
找到两个无环单向链表的第一个公共点描述输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)数据范围: n≤1000n要求:空间复杂度 O(1),时间复杂度 O(n)例如,输入{1,2,3},{4,5},{6,7}时,两个无环的单向链表的结构如下图所示:可以看到它们的第一个公共结点的结点值为6,所以返回结点值为6的结点。思路:先计算出两个链表的长度,计算差值。长链表遍
2022-03-29 11:20:10
67
原创 408计网王道复习-数据链路层(自用)
数据链路层为网络层提供服务:无确认的无连接服务。适用于实时通信或误码率较低的通信信道,如以太网。有确认的无连接服务。适用于误码率较高的通信信道,如无线通信。有确认的面向连接服务。适用于可靠性、实时性要求较高的场合。有连接就一定有确认,不存在无确认的面向连接的服务。帧定界:帧长等于数据部分的长度加上首部和尾部的长度,首部和尾部中含有很多控制信息,它们的一个重要作用就是确定帧的界限。帧同步:接收方应能从接收到的二进制比特流中区分出帧的起始和终止。如HDLC协议中,用标识位F(01111110)来
2022-03-29 09:30:59
645
原创 408计网王道复习-物理层(自用)
基本概念数据:传送信息的实体。信号:数据的电气或电磁表现,是数据在传输过程中的存在形式。连续变化的数据/信号称为模拟数据/信号;有限的离散数值的数据/信号称为数字数据/信号。码元:采用一个固定市场的信号波形(数字脉冲)表示一位k进制码元。时长称为码元宽度。一个数据通信系统划分为信源、信道和信宿。信源:产生和发送数据的源头。信宿:接收数据的终点。信道:信号的传输媒介,线路的逻辑部件。基带信号,基带传输:基带信号将数字信号1和0直接用两种不同的电压表示,传送到数字信道上传
2022-03-27 10:53:10
4443
原创 408计网王道复习-计算机网络体系结构(自用)
计算机网络就是一些互联的、自治的计算机系统的集合。计算机网络的组成1. 从组成部分看,主要由硬件(主机,通信链路,交换设备,通信处理机)、软件(实现资源共享的软件、方便用户使用的各种工具软件)、协议(计算机网络的核心)三大部分组成。2. 从工作方式上看,分为边缘部分(主机)和核心部分(网络路由器)。3. 从功能组成上看,分为通信子网(传输介质、通信设备和相应的网络协议)和资源子网(实现资源共享功能的设备和软件的集合)。计算机网络的功能:数据通信,资源共享,分布式处理,提高可靠性,负载
2022-03-27 10:51:53
2681
原创 C++牛客网编程(九)
描述给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。提示:1.vin.length == pre.length2.pre 和 vin 均无重复元素3.vin出现的元素均出现在 pre里4.只需要返回根结点,系统会自动输出整颗树做答案对比数据范围:n≤2000,节点的值 −10000≤val≤10000要求:空间复杂度 O(n),
2022-03-27 10:47:14
1514
原创 C++牛客网编程(八)
给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)数据范围:0≤n≤15000 ,树上每个节点的val满足 ∣val∣<=1500要求:空间复杂度:O(n),时间复杂度:O(n)例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树之字形层序遍历的结果是[[1],[3,2],[4,5]]思路:用队列层次遍历, 最后打印时将偶数行反转class Solution {public: vector&
2022-03-26 11:31:09
1053
原创 C++牛客网编程(七)
描述请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。数据范围:0≤n,m≤20 1≤len≤25思路:运用深度遍历。重点是深.
2022-03-26 08:31:52
165
原创 C++牛客网编程(六)
求两个数的最大公约数,欧几里得算法#include <iostream>using namespace std;int change(int a, int b) { if (a%b == 0) return b; else return (b, a%b); }int main() { int a, b; cin >> a >> b; cout << change(a, b) << endl; return
2022-03-12 15:25:35
178
原创 C++牛客网编程(五)
描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1数据范围:0≤n≤10000进阶:时间复杂度O(n) ,空间复杂度O(n)思路:设置另外一个数组作为个数标志,直到大于1就输出 int duplicate(vector<int>.
2022-03-11 11:06:13
772
原创 C++牛客网编程(三)
描述输入球的中心点和球上某一点的坐标,计算球的半径和体积输入描述:球的中心点和球上某一点的坐标,以如下形式输入:x0 y0 z0 x1 y1 z1输出描述:输入可能有多组,对于每组输入,输出球的半径和体积,并且结果保留三位小数 为避免精度问题,PI值请使用arccos(-1)。#include <iostream>#include <math.h>#include <iomanip>using namespace std;int mai
2022-03-07 09:18:50
128
原创 c++牛客网编程(二)
描述求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。输入描述:可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。输出描述:对于每组数据,输出N的质因数的个数。思路:不断将正整数分为一个质因数和另一个数的乘积#include <iostream>using namespace std;int main(){ long n; int num=0...
2022-03-06 10:30:47
346
原创 C++牛客网编程
描述输入n个整数,依次输出每个数的约数的个数输入描述:输入的第一行为N,即数组的个数(N<=1000) 接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)输出描述:可能有多组输入数据,对于每组输入数据, 输出N行,其中每一行对应上面的一个数的约数的个数。#include <iostream>using namespace std;int numAdd(int num) { int ans = 0; int i; for
2022-03-04 21:03:19
276
原创 C++容器
容器(container)用于存放数据的类模板。可变长数组、链表、平衡二叉树等数据结构在 STL 中都被实现为容器。程序员使用容器时,即将容器类模板实例化为容器类时,会指明容器中存放的元素是什么类型的。容器中可以存放基本类型的变量,也可以存放对象。对象或基本类型的变量被插入容器中时,实际插入的是对象或变量的一个复制品。STL 中的许多算法(即函数模板),如排序、查找等算法,在执行过程中会对容器中的元素进行比较。这些算法在比较元素是否相等时通常用运算符进行,比较大小通常用<运算符进行,因此,被放入
2022-03-04 15:52:33
2107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人