前缀和技巧解析

前缀和技巧解析

前缀和(Prefix Sum)是一种常用的算法技巧,用于高效地处理一系列连续子数组和的问题。通过构建一个额外的数组来存储从数组起始位置到当前位置的累计和,可以在常数时间内快速计算任意区间的和。

前缀和应用的典型问题

  1. 区间和查询: 前缀和最常见的应用是快速求解数组中某个区间的和。这对于处理大量的区间和查询非常高效。
  2. 求子数组的和: 使用前缀和可以快速求解子数组的和。
  3. 二维矩阵求和: 前缀和技巧也可以扩展到二维矩阵,方便处理多次查询矩阵子区域的和。

303. 区域和检索 - 数组不可变

给定一个整数数组 nums,处理以下类型的多个查询:

  1. 计算索引 leftright (包含 leftright)之间的 nums 元素的 ,其中 left <= right

实现 NumArray 类:

  • NumArray(int[] nums) 使用数组 nums 初始化对象
  • int sumRange(int i, int j) 返回数组 nums 中索引 leftright 之间的元素的 总和 ,包含 leftright 两点(也就是 nums[left] + nums[left + 1] + ... + nums[right] )

示例 1:

输入:
["NumArray", "sumRange", "sumRange", "sumRange"]
[[[-2, 0, 3, -5, 2, -1]], [0, 2], [2, 5], [0, 5]]
输出:
[null, 1, -1, -3]解释:
NumArray numArray = new NumArray([-2, 0, 3, -5, 2, -1]);
numArray.sumRange(0, 2); // return 1 ((-2) + 0 + 3)
numArray.sumRange(2, 5); // return -1 (3 + (-5) + 2 + (-1)) 
numArray.sumRange(0, 5); // return -3 ((-2) + 0 + 3 + (-5) + 2 + (-1))
class NumArray {
public:NumArray(vector<int>& nums) {numsum.resize(nums.size()+1);numsum[0]=0;for(int i=0; i<nums.size(); i++){numsum[i+1]=numsum[i]+nums[i];}}int sumRange(int left, int right) {return (numsum[right+1]-numsum[left]);}
private:vector<int> numsum;
};

304. 二维区域和检索 - 矩阵不可变

给定一个二维矩阵 matrix,以下类型的多个请求:

  • 计算其子矩形范围内元素的总和,该子矩阵的 左上角(row1, col1)右下角(row2, col2)

实现 NumMatrix 类:

  • NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化
  • int sumRegion(int row1, int col1, int row2, int col2) 返回 左上角 (row1, col1)右下角 (row2, col2) 所描述的子矩阵的元素 总和

示例 1:

img

输入: 
["NumMatrix","sumRegion","sumRegion","sumRegion"]
[[[[3,0,1,4,2],[5,6,3,2,1],[1,2,0,1,5],[4,1,0,1,7],[1,0,3,0,5]]],[2,1,4,3],[1,1,2,2],[1,2,2,4]]
输出: 
[null, 8, 11, 12]解释:
NumMatrix numMatrix = new NumMatrix([[3,0,1,4,2],[5,6,3,2,1],[1,2,0,1,5],[4,1,0,1,7],[1,0,3,0,5]]);
numMatrix.sumRegion(2, 1, 4, 3); // return 8 (红色矩形框的元素总和)
numMatrix.sumRegion(1, 1, 2, 2); // return 11 (绿色矩形框的元素总和)
numMatrix.sumRegion(1, 2, 2, 4); // return 12 (蓝色矩形框的元素总和)

思路:构建前缀和矩阵(m+1)*(n+1),因为这个矩阵的第一行和第一列全是0,目的是方便计算

sumnum[i][j]=matrix[i-1][j-1]+sumnum[i-1][j]+sumnum[i][j-1]-sumnum[i-1][j-1];

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

class NumMatrix {
public:NumMatrix(vector<vector<int>>& matrix) {int m = matrix.size();int n = matrix[0].size();sumnum.resize(m+1 , vector<int>(n+1,0));for(int i=1; i<=m; i++){for(int j=1; j<=n; j++){sumnum[i][j]=matrix[i-1][j-1]+sumnum[i-1][j]+sumnum[i][j-1]-sumnum[i-1][j-1];}}}int sumRegion(int row1, int col1, int row2, int col2) {return sumnum[row2+1][col2+1]-sumnum[row2+1][col1]-sumnum[row1][col2+1]+sumnum[row1][col1];}
private:vector<vector<int>> sumnum;
};

1314. 矩阵区域和

给你一个 m x n 的矩阵 mat 和一个整数 k ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和:

  • i - k <= r <= i + k,
  • j - k <= c <= j + k
  • (r, c) 在矩阵内。

示例 1:

输入:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 1
输出:[[12,21,16],[27,45,33],[24,39,28]]

示例 2:

输入:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 2
输出:[[45,45,45],[45,45,45],[45,45,45]]

思路:这道题可以直接套用304. 二维区域和检索 - 矩阵不可变 时实现的 NumMatrix 类,主要注意下通过 min, max 函数优雅避免索引越界的技巧。

class Solution {
public:vector<vector<int>> numsum;void numMatrix(vector<vector<int>>& mat){int m = mat.size();int n = mat[0].size();numsum.resize(m+1, vector<int>(n+1,0));for(int i=1; i<=m; i++){for(int j=1; j<=n; j++){numsum[i][j]=mat[i-1][j-1]+numsum[i-1][j]+numsum[i][j-1]-numsum[i-1][j-1];}}}int sumNumlr(int r1, int c1, int r2, int c2){return numsum[r2+1][c2+1]-numsum[r1][c2+1]-numsum[r2+1][c1]+numsum[r1][c1];}vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {numMatrix(mat);int m = mat.size();int n = mat[0].size();vector<vector<int>> answer(m,vector<int>(n,0));for(int i=0; i<m; i++){for(int j=0; j<n; j++){int minr=max(i-k,0);int minc=max(j-k,0);int maxr=min(i+k,m-1);int maxc=min(j+k,n-1);answer[i][j]=sumNumlr(minr, minc, maxr, maxc);}}return answer;}
};

724. 寻找数组的中心下标

给你一个整数数组 nums ,请计算数组的 中心下标

数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。

如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。

如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1

示例 1:

输入:nums = [1, 7, 3, 6, 5, 6]
输出:3
解释:
中心下标是 3 。
左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,
右侧数之和 sum = nums[4] + nums[5] = 5 + 6 = 11 ,二者相等。

示例 2:

输入:nums = [1, 2, 3]
输出:-1
解释:
数组中不存在满足此条件的中心下标。

示例 3:

输入:nums = [2, 1, -1]
输出:0
解释:
中心下标是 0 。
左侧数之和 sum = 0 ,(下标 0 左侧不存在元素),
右侧数之和 sum = nums[1] + nums[2] = 1 + -1 = 0 。
class Solution {
public:int pivotIndex(vector<int>& nums) {int n = nums.size();vector<int> numsum(n+1, 0);for(int i=1; i<=n; i++){numsum[i] = numsum[i-1] + nums[i-1]; }for(int i=1; i<=n; i++){int leftsum = numsum[i-1];int rightsum = numsum[n]-numsum[i];if(leftsum==rightsum){return i-1;}}return -1;}
};

238. 除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

请 **不要使用除法,**且在 O(n) 时间复杂度内完成此题。

示例 1:

输入: nums = [1,2,3,4]
输出: [24,12,8,6]

示例 2:

输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]

思路:整2个数组,一个是前缀积,一个是后缀积,所求answer元素就是对应前缀积和后缀积的乘积之和

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> qian(n);vector<int> hou(n);vector<int> result(n);qian[0]=nums[0];hou[n-1]=nums[n-1];for(int i=1; i<n; i++){qian[i]=qian[i-1]*nums[i];}for(int i=n-2; i>=0; i--){hou[i]=hou[i+1]*nums[i];}result[0]=hou[1];result[n-1]=qian[n-2];for(int i=1; i<n-1; i++){result[i]=qian[i-1]*hou[i+1];}return result;}
};

1352. 最后 K 个数的乘积

请你实现一个「数字乘积类」ProductOfNumbers,要求支持下述两种方法:

1. add(int num)

  • 将数字 num 添加到当前数字列表的最后面。

2. getProduct(int k)

  • 返回当前数字列表中,最后 k 个数字的乘积。
  • 你可以假设当前列表中始终 至少 包含 k 个数字。

题目数据保证:任何时候,任一连续数字序列的乘积都在 32-bit 整数范围内,不会溢出。

示例:

输入:
["ProductOfNumbers","add","add","add","add","add","getProduct","getProduct","getProduct","add","getProduct"]
[[],[3],[0],[2],[5],[4],[2],[3],[4],[8],[2]]输出:
[null,null,null,null,null,null,20,40,0,null,32]解释:
ProductOfNumbers productOfNumbers = new ProductOfNumbers();
productOfNumbers.add(3);        // [3]
productOfNumbers.add(0);        // [3,0]
productOfNumbers.add(2);        // [3,0,2]
productOfNumbers.add(5);        // [3,0,2,5]
productOfNumbers.add(4);        // [3,0,2,5,4]
productOfNumbers.getProduct(2); // 返回 20 。最后 2 个数字的乘积是 5 * 4 = 20
productOfNumbers.getProduct(3); // 返回 40 。最后 3 个数字的乘积是 2 * 5 * 4 = 40
productOfNumbers.getProduct(4); // 返回  0 。最后 4 个数字的乘积是 0 * 2 * 5 * 4 = 0
productOfNumbers.add(8);        // [3,0,2,5,4,8]
productOfNumbers.getProduct(2); // 返回 32 。最后 2 个数字的乘积是 4 * 8 = 32 
class ProductOfNumbers {
public:vector<int> numlist;ProductOfNumbers() {numlist.push_back(1);}void add(int num) {if(num==0){numlist.clear();numlist.push_back(1);return;}int n = numlist.size();numlist.push_back(numlist[n-1]*num);}int getProduct(int k) {int n = numlist.size();if(k>n-1){return 0;}return numlist[n-1]/numlist[n-1-k];}
};

525. 连续数组

给定一个二进制数组 nums , 找到含有相同数量的 01 的最长连续子数组,并返回该子数组的长度。

示例 1:

输入: nums = [0,1]
输出: 2
说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。

示例 2:

输入: nums = [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。

**思路:**我们可以通过 前缀和 来转换问题,并利用 哈希表 来记录前缀和的索引。具体步骤如下:

  1. 前缀和的定义:遍历数组时,我们可以将 0 和 1 转换为两个不同的值,例如,将 0 视为 -1,将 1 视为 +1。这样问题就转化为:找出和为 0 的最长子数组。因为相同数量的 0 和 1 等价于和为 0 的子数组。
  2. 前缀和的累加:遍历数组时,计算当前元素的前缀和。如果当前前缀和出现过,那么当前子数组与第一次出现该前缀和的索引之间的子数组就含有相同数量的 0 和 1,长度可以计算出来。
  3. 哈希表的作用:哈希表用于记录每个前缀和第一次出现的位置。哈希表的键是前缀和的值,值是该前缀和第一次出现的位置索引。
class Solution {
public:int findMaxLength(vector<int>& nums) {unordered_map<int,int> map;int presum=0;int maxlength=0;map[0]=-1;//i-(-1)=i+1for(int i=0; i<nums.size(); i++){presum += (nums[i]==1)?1:-1;if(map.find(presum)!=map.end()){maxlength=max(maxlength, i-map[presum]);}else{map[presum]=i;}}return maxlength;}
};

523. 连续的子数组和

给你一个整数数组 nums 和一个整数 k ,如果 nums 有一个 好的子数组 返回 true ,否则返回 false

一个 好的子数组 是:

  • 长度 至少为 2 ,且
  • 子数组元素总和为 k 的倍数。

注意

  • 子数组 是数组中 连续 的部分。
  • 如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 xk 的一个倍数。0 始终 视为 k 的一个倍数。

示例 1:

输入:nums = [23,2,4,6,7], k = 6
输出:true
解释:[2,4] 是一个大小为 2 的子数组,并且和为 6 。

示例 2:

输入:nums = [23,2,6,4,7], k = 6
输出:true
解释:[23, 2, 6, 4, 7] 是大小为 5 的子数组,并且和为 42 。 
42 是 6 的倍数,因为 42 = 7 * 6 且 7 是一个整数。

示例 3:

输入:nums = [23,2,6,4,7], k = 13
输出:false
class Solution {
public:bool checkSubarraySum(vector<int>& nums, int k) {//(sumNums[i]-sumNums[j])%k=0 && i-j>=2unordered_map<int,int> map;int presum=0;map[0]=-1;for(int i=0;i<nums.size();i++){presum+=nums[i];int mod=presum%k;if(map.find(mod)!=map.end()){if(i-map[mod]>1){return true;}}else{map[mod]=i;}}return false;}
};

代码解释:

前缀和:我们通过变量 presum 记录到当前位置为止的元素和。

模运算:每次计算 presum % k 来查找之前是否存在相同的模值。如果存在,说明当前的子数组和是 k 的倍数。

哈希表 map:记录每个 presum % k 的首次出现位置。特别地,map[0] = -1 是为了处理从数组开始的子数组(如果前缀和直接就是 k 的倍数)。

返回条件:当我们找到一个符合条件的子数组时,立即返回 true,否则继续遍历。

560. 和为 K 的子数组

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数

子数组是数组中元素的连续非空序列。

示例 1:

输入:nums = [1,1,1], k = 2
输出:2

示例 2:

输入:nums = [1,2,3], k = 3
输出:2
class Solution {
public:int subarraySum(vector<int>& nums, int k) {//sumNum[i]-sumNum[j]=k && count++unordered_map<int,int> map;int sumNum=0;int count=0;map[0]=1;for(int i=0; i<nums.size(); i++){sumNum+=nums[i];int cha = sumNum-k;if(map.find(cha)!=map.end()){count+=map[cha];}map[sumNum]++;}return count;}
};

974. 和可被 K 整除的子数组

给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的非空 子数组 的数目。

子数组 是数组中 连续 的部分。

示例 1:

输入:nums = [4,5,0,-2,-3,1], k = 5
输出:7
解释:
有 7 个子数组满足其元素之和可被 k = 5 整除:
[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]

示例 2:

输入: nums = [5], k = 9
输出: 0
//有几种 i、j 组合,满足 (sumNum[j]−sumNum[i−1]) mod K==0。
//有几种 i、j 组合,满足 sumNum[j] mod K == sumNum[i−1] mod K。
//前提:sumNum[j] 、sumNum[i−1] 为正整数。负数的情况要处理
class Solution {
public:int subarraysDivByK(vector<int>& nums, int k) {// (sumNum[i]-sumNum[j])%k=0unordered_map<int,int> map;int sumNum = 0;int count = 0;map[0]=1;for(int i=0; i<nums.size(); i++){sumNum+=nums[i];int mod = sumNum%k;if (mod < 0) mod += k;//前缀和取余数不能为负数if(map.find(mod)!=map.end()){count+=map[mod];}map[mod]++;}return count;}
};

1124. 表现良好的最长时间段

给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。

我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。

所谓「表现良好的时间段」,意味在这段时间内,「劳累的天数」是严格 大于「不劳累的天数」。

请你返回「表现良好时间段」的最大长度。

示例 1:

输入:hours = [9,9,6,0,6,6,9]
输出:3
解释:最长的表现良好时间段是 [9,9,6]。

示例 2:

输入:hours = [6,6,6]
输出:0
class Solution {
public:int longestWPI(vector<int>& hours) {//等价于nums[i]-nums[j]>0 && max(length)unordered_map<int, int> map;map[0]=-1;int sumNum=0;int length=0;for(int i=0; i<hours.size(); i++){sumNum += (hours[i]>8)?1:-1;if(sumNum>0){length = max(length,i+1);}else{if(map.count(sumNum-1)){length = max(length,i-map[sumNum-1]);} }//避免覆盖第一次出现的位置,因为i-map[sumNum-1]是需要返回最长的也就是最早出现的作为起点if(!map.count(sumNum)){map[sumNum]=i;}}return length;}
};

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

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

相关文章

Mysql每日一题(行程与用户,困难※)

今天给大家分享一个截止到目前位置&#xff0c;我遇到最难的一道mysql题目&#xff0c;非常建议大家亲手做一遍 完整代码如下&#xff0c;这道题的主要难点是它有两个外键&#xff0c;以前没遇到过&#xff0c;我也没当回事&#xff0c;分享一下错误经验哈 当时我写的where判断…

已解决:spark代码中sqlContext.createDataframe空指针异常

这段代码是使用local模式运行spark代码。但是在获取了spark.sqlContext之后&#xff0c;用sqlContext将rdd算子转换为Dataframe的时候报错空指针异常 Exception in thread "main" org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: java.lang.Nu…

cooladmin 后端 查询记录

查询记录&#xff1a;pageQueryOp中列表查询的group by node ts controller代码如下 import { CoolController, BaseController } from cool-midway/core; import { Inject, Post, Get, Param } from midwayjs/decorator; import { ComparePricesPlanInfoEntity } from ../../…

cesium 3DTiles之pnts格式详解

Point Cloud 1 概述 点云&#xff08;Point Cloud&#xff09;瓦片格式用于高效流式传输大规模点云数据&#xff0c;常用于 3D 可视化中。每个点由位置&#xff08;Position&#xff09;和可选的属性定义&#xff0c;这些属性用来描述点的外观&#xff08;如颜色、法线等&…

【SpringBoot】20 同步调用、异步调用、异步回调

Git仓库 https://gitee.com/Lin_DH/system 介绍 同步调用&#xff1a;指程序在执行时&#xff0c;调用方需要等待函数调用返回结果后&#xff0c;才能继续执行下一步操作&#xff0c;是一种阻塞式调用。 异步调用&#xff1a;指程序在执行时&#xff0c;调用方在调用函数后立…

ESLint 使用教程(五):ESLint 和 Prettier 的结合使用与冲突解决

系列文章 ESLint 使用教程&#xff08;一&#xff09;&#xff1a;从零配置 ESLint ESLint 使用教程&#xff08;二&#xff09;&#xff1a;一步步教你编写 Eslint 自定义规则 ESLint 使用教程&#xff08;三&#xff09;&#xff1a;12个ESLint 配置项功能与使用方式详解 ES…

Qt_day5_常用类

常用类 目录 1. QString 字符串类&#xff08;掌握&#xff09; 2. 容器类&#xff08;掌握&#xff09; 2.1 顺序容器QList 2.2 关联容器QMap 3. 几种Qt数据类型&#xff08;熟悉&#xff09; 3.1 跨平台数据类型 3.2 QVariant 统一数据类型 3.3 QStringList 字符串列表 4. QD…

VBA学习笔记:基础知识

1.打开编辑器 工具-选项&#xff0c;可设置编辑器字体大小等 2. 运行 快捷键F5&#xff0c;或 运行-运行宏 若提示宏被禁止&#xff0c;解决办法之一&#xff1a;工具-宏-安全性-安全级-中&#xff0c;关闭excel重新打开&#xff0c;启用宏 保存文件格式为xla或xlam 3. 基本…

【CANOE】【学习】【DecodeString】字节转为中文字符输出

系列文章目录 文章目录 系列文章目录前言一、DecodeString 转为中文字节输出二、代码举例1.代码Demo2.DecodeString 函数说明函数语法&#xff1a;参数说明&#xff1a;返回值&#xff1a;使用示例&#xff1a;示例代码&#xff1a; 说明&#xff1a; 前言 有时候使用的时候&a…

超好用shell脚本NuShell mac安装

利用管道控制任意系统 Nu 可以在 Linux、macOS 和 Windows 上运行。一次学习&#xff0c;处处可用。 一切皆数据 Nu 管道使用结构化数据&#xff0c;你可以用同样的方式安全地选择&#xff0c;过滤和排序。停止解析字符串&#xff0c;开始解决问题。 强大的插件系统 具备强…

【Window主机访问Ubuntu从机——Xrdp配置与使用】

使用Xrdp在Window环境下远程桌面访问Ubuntu主机 文章目录 Ubuntu安装图形化界面Ubuntu安装Xrdp通过网线连接两台主机Window主机有线连接配置Ubuntu从机设置测试有线连接 Window主机打开远程桌面功能参考文章总结 Ubuntu安装图形化界面 sudo apt update sudo apt upgrade sudo …

ECharts图表图例8

用eclipse软件制作动态单仪表图 用java知识点 代码截图&#xff1a;

实验6记录网络与故障排除

实验6记录网络与故障排除 实验目的及要求&#xff1a; 通过实验&#xff0c;掌握如何利用文档记录网络设备相关信息并完成网络拓扑结构的绘制。能够使用各种技术和工具来找出连通性问题&#xff0c;使用文档来指导故障排除工作&#xff0c;确定具体的网络问题&#xff0c;实施…

读取文件内容、修改文件内容、识别文件夹目录(Web操作系统文件/文件夹详解)

前言 因 Unicode IDE 编辑器导入文件、文件夹需要&#xff0c;研究了下导入文件/文件夹的功能实现&#xff0c;发现目前相关文章有点少&#xff0c;故而记录下过程&#xff0c;如果有误&#xff0c;还望指正。(API的兼容性及相关属性、接口定义&#xff0c;请自行查看文件系统 …

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter)

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现&#xff08;Kalman Filter&#xff09; 更新以gitee为准&#xff1a; gitee地址 文章目录 卡尔曼滤波数据融合Python实现C语言实现多个数据如何融合附录&#xff1a;压缩字符串、大小端格式转换压缩字符串浮点数压缩Pac…

docker-hub 无法访问,使用windows魔法拉取docker images再上传到linux docker环境中

云机的服务器是可以docker拉取镜像的&#xff0c;但是本地的虚拟机、物理服务器等网络环境不好的情况&#xff0c;是无法访问docker-hub的&#xff0c;即使更换了docker镜像源国内源也无法使用。 本文章使用 在魔法网络环境下的windows&#xff0c;下载docker images后&#xf…

Python →爬虫实践

爬取研究中心的书目 现在&#xff0c;想要把如下网站中的书目信息爬取出来。 案例一 耶鲁 Publications | Yale Law School 分析网页&#xff0c;如下图所示&#xff0c;需要爬取的页面&#xff0c;标签信息是“<p>”&#xff0c;所以用 itemssoup.find_all("p&…

【Linux学习】【Ubuntu入门】1-4 ubuntu终端操作与shell命令1

1.使用快捷键CtrlAltT打开命令终端&#xff0c;或者单击右键点击… 2.常用shell命令 目录信息查看命令&#xff1a;ls ls -a&#xff1a;显示目录所有文件及文件夹&#xff0c;包括隐藏文件&#xff0c;比如以.开头的 ls -l&#xff1a;显示文件的详细信息 ls -al&#xff1…

WordPress 6.7 “Rollins”发布

每个 WordPress 版本都会向一位在音乐界留下不可磨灭印记的艺术家致敬。WordPress 6.7 的代号为“Rollins”&#xff0c;旨在向传奇爵士萨克斯演奏家桑尼罗林斯致敬。罗林斯是爵士乐界最伟大的即兴演奏家和先驱之一&#xff0c;他以精湛的技术、创新精神和无畏的音乐表达方式影…

ESXi安装【真机和虚拟机】(超详细)

项目简介&#xff1a; ESXi&#xff08;Elastic Sky X Integrated&#xff09;是VMware公司开发的一种裸机虚拟化管理程序&#xff0c;允许用户在单一物理服务器上运行多个虚拟机&#xff08;VM&#xff09;。它直接安装在服务器硬件上&#xff0c;而不是操作系统之上&#xff…