前缀和技巧解析

前缀和技巧解析

前缀和(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.rhkb.cn/news/471398.html

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

相关文章

分享 pdf 转 word 的免费平台

背景 找了很多 pdf 转 word 的平台都骗进去要会员&#xff0c;终于找到一个真正免费的&#xff0c;遂分享。 网址 PDF转Word转换器 - 100%免费市面上最优质的PDF转Word转换器 - 免费且易于使用。无附加水印 - 快速将PDF转成Word。https://smallpdf.com/cn/pdf-to-word

前端面试笔试(二)

目录 一、数据结构算法等综合篇 1.HTTP/2、ETag有关 二、代码输出篇 1.new URL&#xff0c;url中的hostname&#xff0c;pathname&#xff0c;href 扩展说一下url的组成部分和属性 URL的组成部分 urlInfo 对象的属性 2.一个递归的输出例子 3.数组去重的不普通方法1 4.数…

netmap.js:基于浏览器的网络发现工具

netmap.js是一款基于浏览器&#xff0c;用于提供主机发现和端口扫描功能的网络发现工具。 netmap.js的执行速度也非常的快&#xff0c;由于其使用了es6-promise-pool&#xff0c;因此它可以有效地运行浏览器允许的最大并发连接数。 动机 由于我正需要一个基于浏览器的端口扫…

MySQL(5)【数据类型 —— 字符串类型】

阅读导航 引言一、char&#x1f3af;基本语法&#x1f3af;使用示例 二、varchar&#x1f3af;基本语法&#x1f3af;使用示例 三、char 和 varchar 比较四、日期和时间类型1. 基本概念2. 使用示例 五、enum 和 set&#x1f3af;基本语法 引言 之前我们聊过MySQL中的数值类型&…

百度搜索AI探索版多线程批量生成TXT原创文章软件-可生成3种类型文章

百度搜索AI探索版是百度推出的一款基于大语言模型文心一言的综合搜索产品‌。以下是关于百度搜索AI探索版的详细介绍&#xff1a; ‌产品发布‌&#xff1a;百度搜索AI探索版在百度世界大会上进行了灰度测试&#xff0c;并面向用户开放体验‌。 ‌核心功能‌&#xff1a;与传…

websocket初始化

websocket初始化 前言 上一集我们HTTP的ping操作就可以跑通了&#xff0c;那么我们还有一个协议---websocket&#xff0c;我们在这一集就要去完成我们websocket的初始化。 分析 我们在初始化websocket的之前&#xff0c;我们考虑一下&#xff0c;我们什么时候就要初始化我们…

Git在版本控制中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Git在版本控制中的应用 Git在版本控制中的应用 Git在版本控制中的应用 引言 Git 概述 定义与原理 发展历程 Git 的关键技术 分布…

[JAVAEE] 面试题(四) - 多线程下使用ArrayList涉及到的线程安全问题及解决

目录 一. 多线程下使用ArrayList 1.1. 自行判断加锁 1.2 使用Collections.synchronizedList()套壳加锁 1.3 CopyOnWriteArrayList类 二. 总结 一. 多线程下使用ArrayList 多线程下使用ArrayList会涉及到线程安全问题, 例如: public static void main(String[] args) thro…

python——面向对象

一、面向对象编程 1.1 面向过程与面向对象 面向过程和面向对象都是一种编程方式&#xff0c;只不过再设计上有区别。 1.1.1 面向过程pop&#xff1a; 举例&#xff1a;孩子上学 1. 妈妈起床 2. 妈妈洗漱 3. 妈妈做饭 4. 妈妈把孩子叫起来 5. 孩子起床 6. 孩子洗漱 7. 孩子吃…

【缺陷检测】Anomaly Detection via Reverse Distillation from One-Class Embedding

论文地址 代码地址 动机 论文针对传统的知识蒸馏的方案提出了一个问题&#xff1a;认为之前的&#xff08;基于像素点的重建&#xff09;方案[1,2]容易阻碍异常表现的多样性 传统的知识蒸馏teacher和student的网络架构很相似或者几乎相同而且teacher和student的输入流都是…

【PHP】ThinkPHP基础

下载composer ComposerA Dependency Manager for PHPhttps://getcomposer.org/ 安装composer 查看composer是否安装 composer composer --version 安装 ThinkPHP6 如果你是第一次安装的话&#xff0c;首次安装咱们需要打开控制台&#xff1a; 进入后再通过命令,在命令行下面&a…

SpringBoot(十八)SpringBoot集成Minio

项目上传文件集成一下Minio,下面是我在项目中集成Minio的全过程。 首先介绍一下Minio:MinIO是高性能的对象存储,单个对象最大可达5TB。适合存储图片、视频、文档、备份数据、安装包等一系列文件。是一款主要采用Golang语言实现发开的高性能、分布式的对象存储系统。客户端支…

宗馥莉的接班挑战:内斗升级,竞品“偷家”

内斗不止&#xff0c;外患环伺&#xff0c;情怀助力娃哈哈短暂回暖&#xff0c;但市场认可与持续增长仍充满不确定性。 转载&#xff1a;原创新熵 作者丨晓伊 编辑丨蕨影 一波未平&#xff0c;一波又起。继换办公楼、逼员工签新合同和宗馥莉疑似出走等事件后&#xff0c;娃哈哈…

K8S单节点部署及集群部署

1.Minikube搭建单节点K8S 前置条件&#xff1a;安装docker&#xff0c;注意版本兼容问题 # 配置docker源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo# 安装docker环境依赖 yum install -y yum-utils device-m…

MySQL —— MySQL逻辑架构与查询过程

文章目录 MySQL逻辑架构整体分为三层连接层服务层查询缓存解析器优化器执行器 存储引擎层系统文件层 MySQL 查询过程查询过程框图 博客1 博客2 MySQL逻辑架构整体分为三层 最上层为客户端层&#xff0c;并非MySQL所独有&#xff0c;诸如&#xff1a;连接管理、授权认证、权限校…

【大数据学习 | HBASE高级】storeFile文件的合并

Compaction 操作分成下面两种&#xff1a; Minor Compaction&#xff1a;是选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile&#xff0c;对于删除、过期、多余版本的数据不进行清除。 Major Compaction&#xff1a;是指将所有的StoreFile合并成一个StoreFile&am…

微服务day08

Elasticsearch 需要安装elasticsearch和Kibana&#xff0c;应为Kibana中有一套控制台可以方便的进行操作。 安装elasticsearch 使用docker命令安装&#xff1a; docker run -d \ --name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \ //设置他的运行内存空间&#x…

操作系统lab4-页面置换算法的模拟

操作系统lab4-页面置换算法的模拟 文章目录 操作系统lab4-页面置换算法的模拟实验目的实验内容实验分析 代码测试用例运行结果 实验目的 1、掌握请求分页存储管理的常用理论&#xff1a;页面置换算法。 2、理解请求分页中的按需调页机制。 实验内容 独立地用高级语言编写和…

react-redux useSelector钩子 学习样例 + 详细解析

&#xff08;一&#xff09;react-redux useSelector 学习样例 详细解析 创建一个新项目&#xff0c;将依赖正确安装&#xff1a; npx create-react-app my-redux-app cd my-redux-app# 安装 Redux 和 React-Redux npm install redux react-redux# 安装 ajv npm install ajv#…

IP数据云 识别和分析tor、proxy等各类型代理

在网络上使用代理&#xff08;tor、proxy、relay等&#xff09;进行访问的目的是为了规避网络的限制、隐藏真实身份或进行其他的不正当行为。 对代理进行识别和分析可以防止恶意攻击、监控和防御僵尸网络和提高防火墙效率等&#xff0c;同时也可以对用户行为进行分析&#xff…