LCR 194. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]
示例 1:
**输入:**root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
**输出:**3
**解释:**节点 5 和节点 1 的最近公共祖先是节点 3。
示例 2:
**输入:**root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
**输出:**5
**解释:**节点 5 和节点 4 的最近公共祖先是节点 5。因为根据定义最近公共祖先节点可以为节点本身。
说明:
所有节点的值都是唯一的。
p、q 为不同节点且均存在于给定的二叉树中。
root,p,q的分布只有三种情况
p 和 q 分别在 root 的左子树和右子树中,那么 root 就是它 ...
四 内存管理、设备管理、文件系统
地址转换(装入内存的三种方式)
装入模块 装入 内存
绝对装入
只适用于单道程序环境,编译链接后得到的装入模块的指令直接使用了绝对地址
静态重定位
一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存运行期间就不能移动也不能申请内存空间
动态重定位
重定位寄存器:存放装入模块存放的起始位置
链接的三种方式
进程的内存映像
内存中的一个进程
虚拟内存请求分页
文件
文件是以计算机硬盘为载体的存储在计算机上的信息集合,它的形式多样。
文件的逻辑结构是用户可见的结构,即从用户角度看到的文件的全貌。文件的物理结构是文 件在存储器上的组织结构。
1. 文件的逻辑结构(用户视角)
逻辑结构探讨的是文件内部的数据是如何组织起来呈现给用户的。它主要分为两大类:
无结构文件(流式文件)
概念:文件内部就是一连串毫无规则的、毫无结构的字节流。
特点:操作系统根本不管你里面存的是什么,它只看到一堆 0 和 1。你想读取哪里的数据,只能通过读写指针的偏移量来定位。
典型应用:这是 Linux/Unix 系统的核心哲学。你日常接触的 .txt ...
LCR 192. 把字符串转换成整数 (atoi)
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
函数 myAtoi(string s) 的算法如下:
读入字符串并丢弃无用的前导空格
检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
如果整数数超过 32 位有符号整数范围 [−2(31), 2(31 )− 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −2(31) 的整数应该被固定为 −2(31) ,大于 2(31 )− 1 的整数应该被固定为 2(31 )− 1 。
返回整数作为最终结果。
注意:
本题中的空白字符只包括空格字符 ’ ’ 。
除前导空格或数字后的其余字符 ...
LCR 191. 按规则计算统计结果
为了深入了解这些生物群体的生态特征,你们进行了大量的实地观察和数据采集。数组 arrayA 记录了各个生物群体数量数据,其中 arrayA[i] 表示第 i 个生物群体的数量。请返回一个数组 arrayB,该数组为基于数组 arrayA 中的数据计算得出的结果,其中 arrayB[i] 表示将第 i 个生物群体的数量从总体中排除后的其他数量的乘积。
示例 1:
**输入:**arrayA = [2, 4, 6, 8, 10]
输出:[1920, 960, 640, 480, 384]
提示:
所有元素乘积之和不会溢出 32 位整数
arrayA.length <= 100000
因为生物群体数量可能为0,所以我们无法直接使用除法。
首先可以分类讨论:1. 没有零:全部数乘积除以当前数;2. 一个零:其他位置为零,零元素为非零相乘;3. 多个零:都为零;
暴力解法每次遍历只能求出一个数,我们可以考虑以当前元素为分界点。
每个结果都是左区间的数乘右区间的数,并且对于B[i]的左区间有B[i+1]=B[i]*A[i-1],右区间同理
所以可以两次遍历分别求左区间和右区间,每次遍历可直接 ...
LCR 190. 加密运算
计算机安全专家正在开发一款高度安全的加密通信软件,需要在进行数据传输时对数据进行加密和解密操作。假定 dataA 和 dataB 分别为随机抽样的两次通信的数据量:
正数为发送量
负数为接受量
0 为数据遗失
请不使用四则运算符的情况下实现一个函数计算两次通信的数据量之和(三种情况均需被统计),以确保在数据传输过程中的高安全性和保密性。
示例 1:
**输入:**dataA = 5, dataB = -1
**输出:**4
提示:
dataA 和 dataB 均可能是负数或 0
结果不会溢出 32 位整数
通过位运算实现加法,我们先列出二进制相加的情况
点击图片可查看完整电子表格
无进位的和就是两个数异或的结果,进位是两个数相与的结果
那么我们就可以先求无进位和,再把结果加上进位,不断循环直到进位为0
1234567891011class Solution {public: int encryptionCalculate(int dataA, int dataB) { while (dataB != 0) { i ...
LCR 189. 设计机械累加器
请设计一个机械累加器,计算从 1、2… 一直累加到目标数值 target 的总和。注意这是一个只能进行加法操作的程序,不具备乘除、if-else、switch-case、for 循环、while 循环,及条件判断语句等高级功能。
示例 1:
输入: target = 5
输出: 15
示例 2:
输入: target = 7
输出: 28
提示:
1 <= target <= 10000
不能使用乘除、if-else、switch-case、for、while、条件判断
排除这些后只能想到位运算,这就想到了用位运算代替乘法然后用求和公式,需要手动展开乘数二进制
另一种方法,因为禁止了循环语句,所以想要遍历只有递归了,但是条件判断语句也被禁止
递归无法返回,这时我们需要一种手段在target=1时能结束递归
这时想到&&的短路效应,只要&&前的值为0就不会执行后面内容
1234567class Solution {public: int mechanicalAccumulator(int target) { ...








