当前位置: 首页 > news >正文

学校网站建设与维护方案/seo页面内容优化

学校网站建设与维护方案,seo页面内容优化,朝阳网络推广公司,网站还建设 域名可以备案吗文章目录 C 前缀和详解:基础题解与思维分析前言第一章:前缀和基础应用1.1 一维前缀和模板题解法(前缀和)图解分析C代码实现易错点提示代码解读题目解析总结 1.2 二维前缀和模板题解法(二维前缀和)图解分析C…

文章目录

  • C++ 前缀和详解:基础题解与思维分析
    • 前言
    • 第一章:前缀和基础应用
      • 1.1 一维前缀和模板题
        • 解法(前缀和)
        • 图解分析
        • C++代码实现
        • 易错点提示
        • 代码解读
        • 题目解析总结
      • 1.2 二维前缀和模板题
        • 解法(二维前缀和)
        • 图解分析
        • C++代码实现
        • 易错点提示
        • 代码解读
        • 题目解析总结
      • 1.3 寻找数组的中⼼下标(easy)
        • 解法(前缀和)
        • 图解分析
        • C++代码实现
        • 更简单的解法
          • 优化后的 C++代码实现
        • 易错点提示
        • 代码解读
      • 28. 除⾃⾝以外数组的乘积(medium)
        • 解法(前缀积数组)
        • 图解分析
        • C++代码实现
        • 更简单的解法
          • 优化后的 C++代码实现
        • 易错点提示
        • 代码解读
    • 写在最后

C++ 前缀和详解:基础题解与思维分析

💬 欢迎讨论:如有疑问或见解,欢迎在评论区留言互动。

👍 点赞、收藏与分享:如觉得这篇文章对您有帮助,请点赞、收藏并分享!
🚀 分享给更多人:欢迎分享给更多对 C++ 感兴趣的朋友,一起学习前缀和的基础与进阶!


前言

前缀和是一种经典的算法技巧,用于高效地计算数组的某一区间内的元素和。它通过预处理一个前缀和数组,将区间求和的问题转化为常数时间的查询操作。本篇博客将详细讲解前缀和的原理,并结合题目解析,让大家掌握这一高效的算法方法。


第一章:前缀和基础应用

1.1 一维前缀和模板题

题目链接:【模板】一维前缀和

题目描述

给定一个长度为 n 的整数数组 arrq 个查询,每个查询由两个整数 lr 组成,表示区间 [l, r]。请计算出每个区间内所有元素的和。

示例 1

  • 输入:arr = [1, 2, 3, 4, 5], q = 2, 查询区间为 [(1, 3), (2, 4)]
  • 输出:[6, 9]
  • 解释:区间 [1, 3] 的元素和为 1 + 2 + 3 = 6,区间 [2, 4] 的元素和为 2 + 3 + 4 = 9

提示

  • 1 <= n, q <= 100000
  • -10000 <= arr[i] <= 10000

解法(前缀和)

算法思路

a. 预处理前缀和数组

  • 使用 dp[i] 表示从数组起始位置到第 i 个元素的累加和。
  • 递推公式为:
    dp[i] = dp[i - 1] + arr[i];
    
  • 通过一次遍历即可构建前缀和数组,时间复杂度为 O(n)

b. 利用前缀和快速计算区间和

  • 使用前缀和数组,可以在 O(1) 的时间内计算出任意区间 [l, r] 的和:
    sum(l, r) = dp[r] - dp[l - 1];
    
  • 这个公式的核心在于利用 dp[r] 存储了 [1, r] 区间的和,而 dp[l - 1] 则存储了 [1, l-1] 区间的和,二者相减即得 [l, r] 区间内的和。

图解分析

假设 arr = [1, 2, 3, 4, 5],查询区间为 [(1, 3), (2, 4)]

  1. 前缀和数组构建

    • dp[1] = arr[1] = 1
    • dp[2] = dp[1] + arr[2] = 1 + 2 = 3
    • dp[3] = dp[2] + arr[3] = 3 + 3 = 6
    • dp[4] = dp[3] + arr[4] = 6 + 4 = 10
    • dp[5] = dp[4] + arr[5] = 10 + 5 = 15
  2. 查询区间和计算

    • 对于区间 [1, 3]sum(1, 3) = dp[3] - dp[0] = 6
    • 对于区间 [2, 4]sum(2, 4) = dp[4] - dp[1] = 9

前缀和数组

Indexarr[i]dp[i]
111
223
336
4410
5515

C++代码实现
#include <iostream>
#include <vector>
using namespace std;const int N = 100010;
vector<long long> arr(N), dp(N); // 使用 vector 存储数组和前缀和
int n, q; // n 为数组大小,q 为查询次数int main() 
{cin >> n >> q;// 读取数组元素for(int i = 1; i <= n; i++) cin >> arr[i];// 构建前缀和数组,dp[i] 表示从 arr[1] 到 arr[i] 的累加和for(int i = 1; i <= n; i++) dp[i] = dp[i - 1] + arr[i];// 处理每个查询while(q--){int l, r;cin >> l >> r;// 输出区间和 [l, r]cout << dp[r] - dp[l - 1] << endl;}return 0;
}

易错点提示
  1. 前缀和数组的下标范围

    • dp[i] 表示从 arr[1]arr[i] 的累加和,因此在构建前缀和数组时需要从 i = 1 开始,而非 0。读取 arr 时也应从 1 开始。
  2. 边界条件处理

    • l = 1 时,dp[l - 1]0。确保 dp[0] 初始化为 0,以避免边界查询时产生错误。
  3. 数组长度与内存大小

    • arrdp 的长度都最少需要定义为 n+1 以确保不会越界。尤其在大规模数据时,需要合理定义 N 以避免内存溢出。

代码解读

在这段代码中,我们首先通过输入构建了原数组 arr 和相应的前缀和数组 dp。然后通过预处理后的 dp 数组,能够快速计算出任意查询区间 [l, r] 的和。
整个过程只需要 O(n) 的时间构建前缀和数组,再通过 O(1) 的时间解决每个区间和查询,使得在多次查询场景下效率非常高。


题目解析总结

前缀和是一种非常常用的算法技巧,特别是在处理区间求和问题时,能够显著优化计算效率。通过一次遍历构建前缀和数组,我们可以在后续查询中轻松地利用前缀和的特性,实现对任意区间的快速求和。
这道题作为前缀和的模板题,帮助我们掌握了前缀和的核心思想与基本操作。通过它,我们能为后续更复杂的区间问题打下坚实的基础。


1.2 二维前缀和模板题

题目链接:【模板】二维前缀和

题目描述

给定一个大小为 n × m 的矩阵 matrixq 个查询,每个查询由四个整数 x1, y1, x2, y2 组成,表示一个子矩阵的左上角 (x1, y1) 和右下角 (x2, y2)。请计算出每个子矩阵内所有元素的和。

示例 1

  • 输入:matrix = [[1, 2], [3, 4]], q = 1, 查询区间为 [(1, 1, 2, 2)]
  • 输出:[10]
  • 解释:子矩阵包含所有元素 1 + 2 + 3 + 4 = 10

提示

  • 1 <= n, m <= 1000
  • -10000 <= matrix[i][j] <= 10000

解法(二维前缀和)

算法思路

类似于一维前缀和,我们可以预处理一个前缀和矩阵 sum,使得 sum[i][j] 表示从矩阵起点 (1, 1) 到位置 (i, j) 的所有元素的累加和。利用这个前缀和矩阵,可以在 O(1) 时间内求出任意子矩阵的和。

步骤分为两部分:

  1. 构建前缀和矩阵

    • 构建时,我们在矩阵的顶部和左侧添加一行和一列的 0,以简化边界处理。
      在这里插入图片描述

    • 前缀和矩阵的递推公式为:

      sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + matrix[i - 1][j - 1];
      
  2. 利用前缀和矩阵计算子矩阵和

    • 对于左上角 (x1, y1) 和右下角 (x2, y2) 的查询,我们可以通过以下公式计算该子矩阵的和:
      result = sum[x2][y2] - sum[x1 - 1][y2] - sum[x2][y1 - 1] + sum[x1 - 1][y1 - 1];
      

在这里插入图片描述
类比小学就学过的求面积

在这里插入图片描述


图解分析

假设 matrix = [[1, 2], [3, 4]]q = 1,查询区间为 [(1, 1, 2, 2)]

  1. 构建前缀和矩阵

    • 原始矩阵:
      1  2
      3  4
      
    • 构建前缀和矩阵:
      sum = 
      0  0  0
      0  1  3
      0  4  10
      
  2. 查询子矩阵和

    • 对于 x1 = 1, y1 = 1, x2 = 2, y2 = 2
      result = sum[2][2] - sum[0][2] - sum[2][0] + sum[0][0] = 10 - 0 - 0 + 0 = 10
      

C++代码实现
#include <iostream>
#include <vector>
using namespace std;int main() 
{int n, m, q;cin >> n >> m >> q;vector<vector<int>> matrix(n + 1, vector<int>(m + 1, 0));vector<vector<long long>> sum(n + 1, vector<long long>(m + 1, 0));// 读取矩阵数据for(int i = 1; i <= n; i++) {for(int j = 1; j <= m; j++) {cin >> matrix[i][j];}}// 构建前缀和矩阵for(int i = 1; i <= n; i++) {for(int j = 1; j <= m; j++) {sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + matrix[i][j];}}// 处理查询while(q--) {int x1, y1, x2, y2;cin >> x1 >> y1 >> x2 >> y2;long long result = sum[x2][y2] - sum[x1 - 1][y2] - sum[x2][y1 - 1] + sum[x1 - 1][y1 - 1];cout << result << endl;}return 0;
}

易错点提示
  1. 矩阵下标的处理

    • 构建前缀和矩阵时,注意在 matrix 的基础上偏移一行和一列,以简化边界处理。查询时也需调整下标。
  2. 前缀和公式理解

    • 在计算 sum[i][j] 时,记得同时减去重复计算的 sum[i - 1][j - 1]
  3. 处理大规模输入

    • 对于 n, m 较大的输入,使用 long long 类型存储累加和,以避免整数溢出。

代码解读
  • 时间复杂度:前缀和矩阵的构建时间为 O(n * m),每次查询时间为 O(1),适用于大量查询场景。
  • 空间复杂度:前缀和矩阵 sum 需要 O(n * m) 的额外空间。

题目解析总结

二维前缀和是处理矩阵区域和问题的利器,通过一次性构建前缀和矩阵,可以高效地解决任意子矩阵的求和问题。相比于逐个元素累加的方法,前缀和能大幅减少计算次数,使得算法在面对多次查询时表现更佳。


1.3 寻找数组的中⼼下标(easy)

题目链接: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

提示

  • 1 <= nums.length <= 10^4
  • -1000 <= nums[i] <= 1000

解法(前缀和)

算法思路

根据中⼼下标的定义,除了中⼼下标的元素外,该元素左边的「前缀和」等于该元素右边的「后缀和」。

因此,我们可以先预处理两个数组,一个表示前缀和,另一个表示后缀和。然后,通过遍历来找到满足条件的中⼼下标。

  1. 构建前缀和数组 lsum

    • lsum[i] 表示 nums 从开始到位置 i - 1 的所有元素的和,即 [0, i - 1] 区间的累加和。
    • 构建前缀和数组 lsum 的递推公式为:
      lsum[i] = lsum[i - 1] + nums[i - 1];
      
  2. 构建后缀和数组 rsum

    • rsum[i] 表示 nums 从位置 i + 1 到最后一个元素的所有元素的和,即 [i + 1, n - 1] 区间的累加和。
    • 构建后缀和数组 rsum 的递推公式为:
      rsum[i] = rsum[i + 1] + nums[i + 1];
      
  3. 枚举中⼼下标

    • 遍历数组,比较每个位置的前缀和 lsum[i] 和后缀和 rsum[i] 是否相等。如果相等,说明该位置就是中⼼下标,直接返回。
    • 若遍历完成仍无满足条件的下标,则返回 -1

图解分析

假设 nums = [1, 7, 3, 6, 5, 6]

  1. 前缀和数组构建

    • lsum[0] = 0 (表示 nums 的左侧没有元素)
    • lsum[1] = lsum[0] + nums[0] = 0 + 1 = 1
    • lsum[2] = lsum[1] + nums[1] = 1 + 7 = 8
    • lsum[3] = lsum[2] + nums[2] = 8 + 3 = 11
    • lsum[4] = lsum[3] + nums[3] = 11 + 6 = 17
    • lsum[5] = lsum[4] + nums[4] = 17 + 5 = 22
  2. 后缀和数组构建

    • rsum[5] = 0 (表示 nums 的右侧没有元素)
    • rsum[4] = rsum[5] + nums[5] = 0 + 6 = 6
    • rsum[3] = rsum[4] + nums[4] = 6 + 5 = 11
    • rsum[2] = rsum[3] + nums[3] = 11 + 6 = 17
    • rsum[1] = rsum[2] + nums[2] = 17 + 3 = 20
    • rsum[0] = rsum[1] + nums[1] = 20 + 7 = 27
  3. 查找中⼼下标

    • 遍历过程中,发现 lsum[3] == rsum[3],即下标 3 满足条件,因此输出 3

前缀和、后缀和数组

Indexnums[i]lsum[i]rsum[i]
01027
17120
23817
361111
45176
56220

C++代码实现
class Solution {
public:int pivotIndex(vector<int>& nums) {// lsum[i] 表示 [0, i - 1] 区间的累加和// rsum[i] 表示 [i + 1, n - 1] 区间的累加和int n = nums.size();vector<int> lsum(n), rsum(n);// 预处理前缀和数组for(int i = 1; i < n; i++)lsum[i] = lsum[i - 1] + nums[i - 1];// 预处理后缀和数组for(int i = n - 2; i >= 0; i--)rsum[i] = rsum[i + 1] + nums[i + 1];// 查找中⼼下标for(int i = 0; i < n; i++) {if(lsum[i] == rsum[i])return i;}return -1;}
};

更简单的解法

该问题还可以通过更为简洁的解法实现,仅需一个变量记录累加的前缀和,节省空间。

优化思路

遍历数组时,如果一个位置 i 满足 2 * 前缀和 + nums[i] == 总和,则它就是中心下标。其原理在于:

  • 对于中心下标 i,数组的左侧和 tmp 与右侧和(总和 - tmp - nums[i])相等。
  • 即满足条件 2 * tmp + nums[i] == 总和

优化后的 C++代码实现
class Solution {
public:int pivotIndex(vector<int>& nums) {int totalSum = 0, tmp = 0;// 计算总和for(int num : nums) {totalSum += num;}// 遍历数组,判断中心下标条件for(int i = 0; i < nums.size(); i++) {if(2 * tmp + nums[i] == totalSum) {return i; // 找到中心下标}tmp += nums[i]; // 更新前缀和}return -1; // 没有找到中心下标}
};

易错点提示
  1. 前缀和和后缀和的下标范围

    • lsum[i] 表示 [0, i - 1] 区间累加和,而 rsum[i] 表示 [i + 1, n - 1] 区间累加和。因此,遍历中我们直接使用 lsum[i] == rsum[i] 即可判断条件。
  2. 边界处理

    • 若中心下标在数组最左端或最右端,需要确保对应的 lsumrsum0,这样才能保证正确的判断。
  3. 多种中心下标

    • 如果存在多个中心下标,返回最左边的那个,因此遍历时找到第一个满足条件的下标即返回。

代码解读

我们先通过遍历构建了 lsumrsum 数组,然后再次遍历数组,找到第一个满足 lsum[i] == rsum[i] 的位置。

  • 时间复杂度O(n),遍历数组的次数为常数次,适合于长度较大的数组。
  • 空间复杂度O(n),额外的前缀和和后缀和数组 lsumrsum

对于优化后的解法:

  • 时间复杂度O(n),仅需一次遍历。
  • 空间复杂度O(1),只使用一个临时变量记录前缀和,显著节省了空间。

28. 除⾃⾝以外数组的乘积(medium)

题目链接: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 <= nums.length <= 10^5
  • -30 <= nums[i] <= 30
  • 保证数组 nums 中任意元素的全部前缀元素和后缀的乘积都在 32 位整数范围内。

进阶:你可以在 O(1) 的额外空间复杂度内完成这个题⽬吗?(出于对空间复杂度分析的⽬的,输出数组不被视为额外空间。)


解法(前缀积数组)

算法思路

由于题目要求不能使用除法,同时要求 O(n) 的时间复杂度,因此我们不能用求出整个数组的乘积然后除以单个元素的方式求解。

可以利用前缀和思想,使用两个数组来记录每个元素的前缀积后缀积,然后将两者相乘得到每个元素除自身以外的乘积。

  1. 定义前缀积数组 lprod

    • lprod[i] 表示 nums 从开始到 i - 1 的所有元素的乘积,即 [0, i - 1] 区间内所有元素的乘积。
    • 构建前缀积数组 lprod 的递推公式为:
      lprod[i] = lprod[i - 1] * nums[i - 1];
      
  2. 定义后缀积数组 rprod

    • rprod[i] 表示 numsi + 1 到数组末尾的所有元素的乘积,即 [i + 1, n - 1] 区间内所有元素的乘积。
    • 构建后缀积数组 rprod 的递推公式为:
      rprod[i] = rprod[i + 1] * nums[i + 1];
      
  3. 计算结果数组

    • 遍历 nums,计算每个位置 i 的结果 ret[i]lprod[i] * rprod[i]
    • 因为 lprod[i] 包含的是 nums[0]nums[i - 1] 的乘积,而 rprod[i] 包含的是 nums[i + 1] 到末尾的乘积,两者相乘即为除 nums[i] 外的所有元素乘积。

图解分析

假设 nums = [1, 2, 3, 4],期望的结果为 [24, 12, 8, 6]

  1. 前缀积数组构建

    • lprod[0] = 1 (初始条件,表示没有元素的乘积)
    • lprod[1] = lprod[0] * nums[0] = 1 * 1 = 1
    • lprod[2] = lprod[1] * nums[1] = 1 * 2 = 2
    • lprod[3] = lprod[2] * nums[2] = 2 * 3 = 6
  2. 后缀积数组构建

    • rprod[3] = 1 (初始条件,表示没有元素的乘积)
    • rprod[2] = rprod[3] * nums[3] = 1 * 4 = 4
    • rprod[1] = rprod[2] * nums[2] = 4 * 3 = 12
    • rprod[0] = rprod[1] * nums[1] = 12 * 2 = 24
  3. 计算最终结果

    • ret[0] = lprod[0] * rprod[0] = 1 * 24 = 24
    • ret[1] = lprod[1] * rprod[1] = 1 * 12 = 12
    • ret[2] = lprod[2] * rprod[2] = 2 * 4 = 8
    • ret[3] = lprod[3] * rprod[3] = 6 * 1 = 6

前缀积、后缀积数组

Indexnums[i]lprod[i]rprod[i]ret[i]
0112424
1211212
23248
34616

C++代码实现
class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> lprod(n, 1), rprod(n, 1), ret(n);// 构建前缀积数组for(int i = 1; i < n; i++) {lprod[i] = lprod[i - 1] * nums[i - 1];}// 构建后缀积数组for(int i = n - 2; i >= 0; i--) {rprod[i] = rprod[i + 1] * nums[i + 1];}// 计算结果数组for(int i = 0; i < n; i++) {ret[i] = lprod[i] * rprod[i];}return ret;}
};

更简单的解法

优化思路

我们可以进一步优化空间复杂度到 O(1)。通过仅使用一个 ret 数组来存储结果,并利用它保存前缀积,再遍历一次通过累积的后缀积来更新结果:

  1. 计算前缀积并保存到 ret
  2. 遍历并乘以后缀积:在遍历过程中同时更新后缀积的值,使每个位置的结果在不需要额外的 lprodrprod 数组的情况下得到。

优化后的 C++代码实现
class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> ret(n, 1);// 计算前缀积for(int i = 1; i < n; i++) {ret[i] = ret[i - 1] * nums[i - 1];}// 计算后缀积并更新结果int suffixProd = 1;for(int i = n - 1; i >= 0; i--) {ret[i] *= suffixProd;suffixProd *= nums[i];}return ret;}
};

易错点提示
  1. 初始条件

    • lprod[0]rprod[n-1] 都初始化为 1,表示没有元素的乘积。
  2. 空间优化

    • 优化解法中只使用 ret 数组存储前缀积,后续遍历时逐个乘以后缀积。
  3. 避免溢出

    • 题目保证元素乘积在 32 位整数范围内,但实际操作时要避免大数溢出,注意数据类型的使用。

代码解读

在此解法中,我们通过构建前缀积和后缀积的方式实现了在 O(n) 时间复杂度下计算每个位置的乘积。在优化方案中,通过巧妙地在结果数组中存储前缀积并逐步累加后缀积,实现了空间复杂度的优化。

  • 时间复杂度O(n),无论是初始计算前缀积和后缀积,还是单次遍历,时间复杂度都为 O(n)
  • 空间复杂度:原方案为 O(n),优化方案达到 O(1) 的额外空间复杂度。

写在最后

在这片数列的流动之中,我们从前缀和的入门,渐次深入,直抵算法思想的核心。四道基础题如同桥梁,串联起前缀和与后缀积的巧妙应用,从区间求和的简明优雅到排除自身后的乘积演算,每一步都指向数据处理的无限可能。这是算法的序曲,数字的暗涌,如流水般轻盈而深邃。随着思维渐入佳境,我们将在下篇中进一步探索数列的复杂美,揭开更深层的优化思路,与算法之光同行。

以上就是关于【优选算法篇】前缀之序,后缀之章:于数列深处邂逅算法的光与影的内容啦,各位大佬有什么问题欢迎在评论区指正,您的支持是我创作的最大动力!❤️
在这里插入图片描述

相关文章:

【优选算法篇】前缀之序,后缀之章:于数列深处邂逅算法的光与影

文章目录 C 前缀和详解&#xff1a;基础题解与思维分析前言第一章&#xff1a;前缀和基础应用1.1 一维前缀和模板题解法&#xff08;前缀和&#xff09;图解分析C代码实现易错点提示代码解读题目解析总结 1.2 二维前缀和模板题解法&#xff08;二维前缀和&#xff09;图解分析C…...

win10 更新npm 和 node

win10 更新npm 和 node win10 更新 npm winR 输入cmd&#xff0c;打开命令行&#xff0c;并输入如下 # 查看当前npm版本 npm -v # 清缓存 npm cache clean --force # 强制更新npm&#xff0c;试过npm update -g&#xff0c;没起作用&#xff0c;版本没变化 npm install -g …...

搜索引擎算法更新对网站优化的影响与应对策略

内容概要 随着互联网的不断发展&#xff0c;搜索引擎算法也在不断地进行更新和优化。了解这些算法更新的背景与意义&#xff0c;对于网站管理者和优化人员而言&#xff0c;具有重要的指导意义。不仅因为算法更新可能影响到网站的排名&#xff0c;还因为这些变化也可能为网站带…...

使用 Q3D 计算芯片引线的 AC 和 DC R 和 L

摘要: 模具经常用于电子行业。了解其导联的寄生特性对于设计人员来说很重要。Q3D 是计算 RLCG 的完美工具。它可用于高速板或低频电力电子设备。 在下面的视频中,我们展示了如何修改几何结构、设置模型和检查结果。 详细信息: 几何图形可以在 Q3D 中创建,也可以作为不同…...

前端_008_Vite

文章目录 Vite项目结构依赖构建插件 官网&#xff1a;https://vitejs.cn/vite3-cn/guide/ 一句话简介&#xff1a;前端的一个构建工具 Vite项目结构 index.html package.json vite.config.js public目录 src目录 #新建一个vite项目 npm create vitelatest原有项目引入vite需要…...

ssm007亚盛汽车配件销售业绩管理统(论文+源码)_kaic

本科毕业设计论文 题目&#xff1a;亚盛汽车配件销售业绩管理系统设计与实现 系 别&#xff1a; XX系&#xff08;全称&#xff09; 专 业&#xff1a; 软件工程 班 级&#xff1a; 软件工程15201 学生姓名&#xff1a; 学生学号&#xff1a; 指导教师&am…...

如何使用python完成时间序列的数据分析?

引言 时间序列分析是统计学和数据分析中的一个重要领域,广泛应用于经济学、金融、气象学、工程等多个领域。 时间序列数据是按时间顺序排列的一系列数据点,通常用于分析数据随时间的变化趋势。 本文将介绍时间序列分析的基本概念、常用方法以及如何使用Python进行时间序列…...

数字ic设计,Windows/Linux系统,其他相关领域,软件安装包(matlab、vivado、modelsim。。。)

目录 一、总述 二、软件列表 1、modelsim_10.6c 2、notepad 3、matlab 4、Visio-Pro-2016 5、Vivado2018 6、VMware15 7、EndNote X9.3.1 8、Quartus 9、pycharm 10、CentOS7-64bit 一、总述 过往发了很多数字ic设计领域相关的内容&#xff0c;反响也很好。 最近…...

SD-WAN分布式组网:构建高效、灵活的企业网络架构

随着企业数字化转型的深入&#xff0c;分布式组网逐渐成为企业网络架构中的核心需求。无论是跨区域的分支机构互联&#xff0c;还是企业与云服务的连接&#xff0c;如何在不同区域实现高效、低延迟的网络传输&#xff0c;已成为业务成功的关键。SD-WAN&#xff08;软件定义广域…...

Task :prepareKotlinBuildScriptModel UP-TO-DATE,编译卡在这里不动或报错

这里写自定义目录标题 原因方案其他思路 原因 一般来说&#xff0c;当编译到这个task之后&#xff0c;后续是要进行一些资源的下载的&#xff0c;如果你卡在这边不动的话&#xff0c;很有可能就是你的IDE目前没有办法进行下载。 方案 开关一下IDE内部的代理&#xff0c;或者…...

unseping攻防世界

源码分析 <?php highlight_file(__FILE__);//代码高亮 class ease{//声明了两个私有属性&#xff1a;保存要调用的方法的名称和保存该方法的参数。$method&#xff0c;$argsprivate $method;private $args;//构造函数在实例化类的对象时初始化,即为对象成员变量赋初始值。…...

大厂面试真题-简单描述一下SpringBoot的启动过程

SpringBoot的启动流程是一个复杂但有序的过程&#xff0c;它涉及多个步骤和组件的协同工作。以下是SpringBoot启动流程的详细解析&#xff1a; 一、启动main方法 当SpringBoot项目启动时&#xff0c;它会在当前工作目录下寻找有SpringBootApplication注解标识的类&#xff0c…...

4. 硬件实现

博客补充&#xff1a; CUDA C 编程指南学习_c cuda编程-CSDN博客https://blog.csdn.net/qq_62704693/article/details/141225395?spm1001.2014.3001.5501NVIDIA GPU 架构是围绕可扩展的多线程流式多处理器 &#xff08;SM&#xff09; 阵列构建的。当主机 CPU 上的 CUDA 程序…...

《操作系统真象还原》第3章 完善MBR【3.1 — 3.2】

目录 引用与说明 3.1、地址、section、vstart 浅尝辄止 1、什么是地址 2、什么是 section【汇编】 3、什么是 vstart【汇编】 3.2、CPU 的实模式 1、CPU 工作原理【重要】 2、实模式下的寄存器 4、实模式下 CPU 内存寻址方式 5、栈到底是什么玩意儿 6 ~ 8 无条件转移…...

八大排序-冒泡排序

在里面找动图理解 【数据结构】八大排序(超详解附动图源码)_数据结构排序-CSDN博客 一 简介 冒泡排序应该是我们最熟悉的排序了&#xff0c;在C语言阶段我们就学习了冒泡排序。 他的思想也非常简单&#xff1a; 两两元素相比&#xff0c;前一个比后一个大就交换&#xff0…...

基于Spring Boot+Vue的助农销售平台(协同过滤算法、节流算法、支付宝沙盒支付、图形化分析)

&#x1f388;系统亮点&#xff1a;协同过滤算法、节流算法、支付宝沙盒支付、图形化分析&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&…...

uniapp写抖音小程序阻止右滑返回上一个页面

最近用uniapp写小程序遇到一个问题因为内部用到右滑的业务&#xff0c;但是只要右滑就会回到上一页面&#xff0c;用了event.preventDeafult()没有用&#xff0c;看了文档找到了解决办法 1.在最外层view加上touchstart事件 <view class"container" touchstart&q…...

华为配置手工负载分担模式链路聚合实验

目录 组网需求 配置思路 操作步骤 配置文件 组网图形 图1 配置手工负载分担模式链路聚合组网图 组网需求配置思路操作步骤配置文件 组网需求 如图1所示&#xff0c;AC1和AC2通过以太链路分别都连接VLAN10和VLAN20&#xff0c;且AC1和AC2之间有较大的数据流量。 用户希望A…...

【Spring】Cookie与Session

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;计算机网络那些事 一、Cookie是什么&#xff1f; Cookie的存在主要是为了解决HTTP协议的无状态性问题&#xff0c;即协议本身无法记住用户之前的操作。 "⽆状态" 的含义指的是: 默认情况…...

chat_gpt回答:qt中,常见格式及格式转换

在Qt中&#xff0c;常见的数据格式包括&#xff1a; QVariant&#xff1a;可以存储多种数据类型&#xff0c;包括整型、浮点型、字符串、布尔值、日期等。QString&#xff1a;用于存储和处理文本字符串。QByteArray&#xff1a;用于处理字节数组&#xff0c;常用于二进制数据。…...

CSS兼容处理

“前端开发兼容——CSS篇” 在前端开发中&#xff0c;CSS样式的兼容性问题常常让开发者感到棘手&#xff0c;尤其是当涉及到IE浏览器时。由于IE浏览器版本繁多&#xff0c;每个版本在CSS支持上还存在差异&#xff0c;这导致开发者在实现统一的视觉效果时&#xff0c;不得不编写…...

制氮机分子筛的材质选择

制氮机分子筛的材质选择对于其性能和效率至关重要。作为制氮设备中的核心部件&#xff0c;分子筛承担着将空气中的氮气与氧气有效分离的重任。以下是对制氮机分子筛常用材质的详细探讨&#xff1a; 制氮机分子筛的主要材质 碳分子筛(CMS) 碳分子筛由活性炭经过特殊工艺加工而成…...

使用Virtual Audio Cable捕获系统音频输出并使用Python处理

一、下载安装Virtual Audio Cable&#xff0c;软件下载地址和安装过程略过。 二、Virtual Audio Cable使用方法Virtual Audio Cable使用笔记一&#xff1a;使用Virtual Audio Cable将播放器的音频流传输到真实声卡驱动中_virtual audio cable control panel-CSDN博客 三、打开…...

微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析

微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析 目录 微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析 1、iOS在scroll-view内部上下滑动吸顶的现象 正常的上下滑动吸顶覆盖&#xff1a; iOS及iPa…...

HDU-1695 GCD

题目大意&#xff1a;已知 1 < x < b , 1 < y < d , 求 gcd ( x , y ) k 的对数。请注意&#xff0c;&#xff08;x5&#xff0c; y7&#xff09; 和 &#xff08;x7&#xff0c; y5&#xff09; 被认为是相同的。 思路&#xff1a;先将 gcd ( x , y ) k 两边同时…...

unity游戏开发之赛车游戏

在这个 unity 2d 赛车游戏教程中&#xff0c;我将构建一款移动超休闲赛车游戏。 这将是一个简单的 unity 2d 汽车游戏。所以这将需要有一个可以无限滚动的背景。 我们需要避开一些障碍。一些评分系统。 以及一种使用我们的手机加速度计控制我们的汽车的方法。然后&#xff0c;我…...

解决milvus migration 迁移数据到出现数据丢失问题

在迁移数据的时候发现数据丢失 问题是数据在批量迁移的过程中&#xff0c;这个错误会被忽略掉 分析下来是因为buuferSize 设置的是500条数据&#xff0c;但是迁移工具对一次迁移的数据是是有大小限制的&#xff0c;如果500条数据的总大小大于4194304&#xff0c;就会导致数据…...

Python Flask 数据库开发

Python Flask 数据库开发 引言环境配置创建 Flask 应用&#xff0c;连接数据库定义路由定义模型创建表创建 API 数据库直接操作启动 Flask 应用app.py 示例运行 Flask访问应用 展望 引言 在现代 web 开发中&#xff0c;Python 的 Flask 框架因其轻量和灵活性受到广泛欢迎。结合…...

深度学习(七)深度强化学习:融合创新的智能之路(7/10)

一、深度强化学习的崛起 深度强化学习在人工智能领域的重要地位 深度强化学习作为一种融合了深度学习和强化学习的新技术&#xff0c;在人工智能领域占据着至关重要的地位。它结合了深度学习强大的感知能力和强化学习优秀的决策能力&#xff0c;能够处理复杂的任务和环境。例如…...

mac电脑通过 npm 安装 @vue/cli脚手架超时问题;

npm 安装 vue/cli遇到的问题步骤 一、安装 Homebrew 如果你还没有安装 Homebrew&#xff0c;首先需要安装它。Homebrew 是 macOS 上的一款包管理工具&#xff0c;它允许你通过简单的命令行指令安装、更新和卸载软件包。&#xff1b; 1, 打开终端&#xff08;Terminal&#xf…...