二维前缀和数组二维差分数组

news2024/11/18 6:40:21

二维前缀和数组&二维差分数组

一维前缀和

  • 用途:快速求出数组中 n u m s [ i , j ] nums[i,j] nums[i,j]元素之和

  • 定义: s u m s [ i + 1 ] sums[i+1] sums[i+1]nums数组前 i i i个元素之和
    s u m s [ i + 1 ] = ∑ j = 0 i n u m s [ j ] sums[i + 1] = \sum _{j=0} ^{i}nums[j] sums[i+1]=j=0inums[j]

  • 因此,可以快速计算出数组中 n u m s [ i , j ] nums[i,j] nums[i,j]元素之和为 s u m [ j + 1 ] − s u m [ i ] sum[j+1]-sum[i] sum[j+1]sum[i]

一维差分

  • 定义:差分数组的每一项都是原数组该项与上一项的差
    d [ i ] = a [ i ] − a [ i − 1 ] d[i]=a[i]-a[i-1] d[i]=a[i]a[i1]

  • 用途:常用于区间修改,如对原始数组a[n]内一段区间上的数值进行加减操作,则:

    • 在差分数组d[n]选定区间[l,r],确认加减数值x

    d [ l ] + = x d [ r + 1 ] − = x d[l] += x \\d[r+1] -= x d[l]+=xd[r+1]=x

    • 然后对该数组求累加和数组,就得到了变化后的数组
  • 例如

    index012345
    原始数组023758
    原差分数组0214-23
    操作:对区间[1,3]+35610
    现差分数组0514-53
    累加和数组0561058

二维前缀和

  • 「二维前缀和」解决的是二维矩阵中的矩形区域求和问题。

  • 二维前缀和数组中的每一个格子记录的是「**以当前位置为区域的右下角(区域左上角恒定为原数组的左上角)**的区域和」【应该不固定 可以倒转】
    s u m [ i , j ] = s u m [ i − 1 ] [ j ] + s u m [ i ] [ j − 1 ] − s u m [ i − 1 ] [ j − 1 ] + m a t r i x [ i ] [ j ] sum[i,j] = sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+matrix[i][j] sum[i,j]=sum[i1][j]+sum[i][j1]sum[i1][j1]+matrix[i][j]
    1.png

  • 因此,如果要求 (x1, y1) 作为左上角,(x2, y2) 作为右下角的区域和的时候,可以直接利用二维前缀和数组快速求解:
    r e s = s u m [ x 2 ] [ y 2 ] − s u m [ x 1 − 1 ] [ y 2 ] − s u m [ x 2 ] [ y 1 − 1 ] + s u m [ x 1 − 1 ] [ y 1 − 1 ] res=sum[x2][y2] - sum[x1 - 1][y2] - sum[x2][y1 - 1] + sum[x1 - 1][y1 - 1] res=sum[x2][y2]sum[x11][y2]sum[x2][y11]+sum[x11][y11]

二维差分

  • 「二维差分」解决的是二维矩阵中的矩形区域值的变化问题。

  • 两种情况:以当前位置为左上角或右下角

  • 左上角

    • 二维数组某个位置 ( x 1 , y 1 ) (x1,y1) (x1,y1)的变化量,可由二维差分数组的二维前缀和数组得到,即以当前位置为左上角,原数组的右下角为右下角的区域和

    • 二维差分数组中的每一个格子记录的是「以当前位置为区域的右下角(区域左上角恒定为原数组的左上角)的值的变化量」【应该不固定 可以倒转】

    • 因此,如果要求 ( x 1 , y 1 ) (x1, y1) (x1,y1) 作为左上角, ( x 2 , y 2 ) (x2, y2) (x2,y2) 作为右下角的区域值增加 x x x的时候,可以利用二维差分数组快速求解,此时相当于二维差分矩阵上对 ( x 2 , y 2 ) (x2,y2) (x2,y2)增加 x x x,对 ( x 2 , y 1 − 1 ) (x2,y1-1) (x2,y11) ( x 1 − 1 , y 2 ) (x1-1,y2) (x11,y2)减小 x x x,再对重复区域 ( x 1 − 1 , y 1 − 1 ) (x1-1,y1-1) (x11,y11)增加 x x x

    • 二维数组某个位置 ( x 1 , y 1 ) (x1,y1) (x1,y1)的变化量,可由二维差分数组的二维前缀和数组sum得到,即以当前位置为左上角,原数组的右下角为右下角的区域和【倒叙求】
      s u m [ i , j ] = s u m [ i + 1 ] [ j ] + s u m [ i ] [ j + 1 ] − s u m [ i + 1 ] [ j + 1 ] + d e v [ i ] [ j ] sum[i,j] = sum[i+1][j]+sum[i][j+1]-sum[i+1][j+1]+dev[i][j] sum[i,j]=sum[i+1][j]+sum[i][j+1]sum[i+1][j+1]+dev[i][j]

  • 右下角【常用】

    • 二维数组某个位置 ( x 1 , y 1 ) (x1,y1) (x1,y1)的变化量,可由二维差分数组的二维前缀和数组得到,即以当前位置为右下角,原数组的左上角为左上角的区域和

    • 二维差分数组中的每一个格子记录的是「以当前位置为区域的左上角(区域右下角恒定为原数组的右下角)的值的变化量」【应该不固定 可以倒转】

    • 因此,如果要求 ( x 1 , y 1 ) (x1, y1) (x1,y1) 作为左上角, ( x 2 , y 2 ) (x2, y2) (x2,y2) 作为右下角的区域值增加 x x x的时候,可以利用二维差分数组快速求解,此时相当于二维差分矩阵上对 ( x 1 , y 1 ) (x1,y1) (x1,y1)增加 x x x,对 ( x 2 + 1 , y 1 ) (x2+1,y1) (x2+1,y1) ( x 1 , y 2 + 1 ) (x1,y2+1) (x1,y2+1)减小 x x x,再对重复区域 ( x 2 + 1 , y 2 + 1 ) (x2+1,y2+1) (x2+1,y2+1)增加 x x x

    • 要求得二维数组每个位置 ( x 1 , y 1 ) (x1,y1) (x1,y1)的变化量,即求二维差分数组的二维前缀和数组sum,即差分数组以当前位置为右下角,原数组的左上角为左上角的区域和
      s u m [ i , j ] = s u m [ i − 1 ] [ j ] + s u m [ i ] [ j − 1 ] − s u m [ i − 1 ] [ j − 1 ] + d e v [ i ] [ j ] sum[i,j] = sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+dev[i][j] sum[i,j]=sum[i1][j]+sum[i][j1]sum[i1][j1]+dev[i][j]

  • 总结

    • 二维差分数组可视为以位置[i,j]为右下角原点为右上角的区域之和【二维前缀和数组 s u m [ i ] [ j ] sum[i][j] sum[i][j]】与该区域除了位置[i,j]的区域和之差,用二维前缀和数组可表示为

    d i v [ i ] [ j ] = s u m [ i ] [ j ] − s u m [ i − 1 ] [ j ] − s u m [ i ] [ j − 1 ] + s u m [ i + 1 ] [ j + 1 ] div[i][j]=sum[i][j] - sum[i-1][j]-sum[i][j-1]+sum[i+1][j+1] div[i][j]=sum[i][j]sum[i1][j]sum[i][j1]+sum[i+1][j+1]

    image-20230118214317962

    • 因此若已知二维数组a,求得其二维前缀和数组b,那么a即为b的差分数组
  • 用途:将某一区域的值进行变化,首先求出差分数组,然后对该求出二维前缀和数组,即可求得变化后的结果

  • 模板:由区域变化量求得二维差分数组,由二维差分数组求前缀和数组

    二维差分数组div中的每一个格子记录的是「以当前位置为区域的左上角(区域右下角恒定为原数组的右下角)的值的变化量」【应该不固定 可以倒转】

    二维差分数组的二维前缀和数组sum,即差分数组以当前位置为右下角,原数组的左上角为左上角的区域和

    • 初始时div数组需要扩展边界,转化为sum时需要处理0

      class Solution {
          public int[][] rangeAddQueries(int n, int[][] queries) {
              int[][] div = new int[n + 1][n + 1];
              for (int[] q : queries){
                  div[q[0]][q[1]]++;
                  div[q[0]][q[3] + 1]--;
                  div[q[2] + 1][q[1]]--;
                  div[q[2] + 1][q[3] + 1]++;
              }
              int[][] sum = new int[n][n];
              for (int i = 0; i < n; i++){
                  for (int j = 0; j < n; j++){
                      sum[i][j] = div[i][j];
                      if (i != 0) sum[i][j] += sum[i - 1][j];
                      if (j != 0) sum[i][j] += sum[i][j - 1]; 
                      if (i != 0 && j != 0) sum[i][j] -= sum[i - 1][j - 1];
                  }
              }
              return sum;
          }
      }
      
    • div数组边界可以+2,方便处理0

      d i v [ 1 : n ] [ 1 : n ] div[1:n][1:n] div[1:n][1:n]计算为二维前缀和数组,在赋值给结果集

      class Solution {
          public int[][] rangeAddQueries(int n, int[][] queries) {
              int[][] div = new int[n + 2][n + 2];
              for (int[] q : queries){
                  div[q[0] + 1][q[1] + 1]++;
                  div[q[0] + 1][q[3] + 2]--;
                  div[q[2] + 2][q[1] + 1]--;
                  div[q[2] + 2][q[3] + 2]++;
              }
              int[][] sum = new int[n][n];
              for (int i = 1; i <= n; i++){
                  for (int j = 1; j <= n; j++){
                      sum[i - 1][j - 1] = (div[i][j] += div[i - 1][j] + div[i][j - 1] - div[i - 1][j - 1]);
                  }
              }
              return sum;
          }
      }
      
  • 模板:由前缀和数组求得二维差分数组即求出每个位置的数值

    	// sum n*n
    	// div (n+1)*(n+1)
    	//求出差分数组
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++){
    			div[i][j]=sum[i][j]-sum[i-1][j]-sum[i][j-1]+sum[i-1][j-1]; 
    	} 
    

相关题目

子矩阵元素加 1【LC2536】

给你一个正整数 n ,表示最初有一个 n x n 、下标从 0 开始的整数矩阵 mat ,矩阵中填满了 0 。

另给你一个二维整数数组 query 。针对每个查询 query[i] = [row1i, col1i, row2i, col2i] ,请你执行下述操作:

  • 找出 左上角(row1i, col1i)右下角(row2i, col2i) 的子矩阵,将子矩阵中的 每个元素1 。也就是给所有满足 row1i <= x <= row2icol1i <= y <= col2imat[x][y]1

返回执行完所有操作后得到的矩阵 mat

暴力

java过了…

class Solution {
    public int[][] rangeAddQueries(int n, int[][] queries) {
        int[][] mat = new int[n][n];
        for (int[] query : queries){
            int row1 = query[0], col1 = query[1], row2 = query[2], col2 = query[3];
            for (int i = row1; i <= row2; i++){
                for (int j = col1; j <= col2; j++){
                    mat[i][j]++;
                }
            }
        }
        return mat;

    }
}
  • 复杂度
    • 时间复杂度: O ( n 2 ∗ q ) O(n^2*q) O(n2q) q q q q u e r i e s queries queries的长度
    • 空间复杂度: O ( 1 ) O(1) O(1)

二维差分

前置知识:二维差分数组与二维前缀和数组

  • 思路:使用二维差分数组记录每个区域的变化量,然后通过二维前缀和数组求得每个位置的值

  • 实现

    • 二维差分数组div中的每一个格子记录的是「以当前位置为区域的左上角(区域右下角恒定为原数组的右下角)的值的变化量」【应该不固定 可以倒转】

    • 二维差分数组的二维前缀和数组sum,即差分数组以当前位置为右下角,原数组的左上角为左上角的区域和

    • 因此,如果要求 ( x 1 , y 1 ) (x1, y1) (x1,y1) 作为左上角, ( x 2 , y 2 ) (x2, y2) (x2,y2) 作为右下角的区域值增加 x x x的时候,可以利用二维差分数组快速求解,此时相当于二维差分矩阵上对 ( x 1 , y 1 ) (x1,y1) (x1,y1)增加 x x x,对 ( x 2 + 1 , y 1 ) (x2+1,y1) (x2+1,y1) ( x 1 , y 2 + 1 ) (x1,y2+1) (x1,y2+1)减小 x x x,再对重复区域 ( x 2 + 1 , y 2 + 1 ) (x2+1,y2+1) (x2+1,y2+1)增加 x x x

    • 要求得二维数组每个位置 ( x 1 , y 1 ) (x1,y1) (x1,y1)的变化量,即求二维差分数组的二维前缀和数组sum,即差分数组以当前位置为右下角,原数组的左上角为左上角的区域和
      s u m [ i , j ] = s u m [ i − 1 ] [ j ] + s u m [ i ] [ j − 1 ] − s u m [ i − 1 ] [ j − 1 ] + d e v [ i ] [ j ] sum[i,j] = sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+dev[i][j] sum[i,j]=sum[i1][j]+sum[i][j1]sum[i1][j1]+dev[i][j]

      • 初始时div数组需要扩展边界,转化为sum时需要处理0

        class Solution {
            public int[][] rangeAddQueries(int n, int[][] queries) {
                int[][] div = new int[n + 1][n + 1];
                for (int[] q : queries){
                    div[q[0]][q[1]]++;
                    div[q[0]][q[3] + 1]--;
                    div[q[2] + 1][q[1]]--;
                    div[q[2] + 1][q[3] + 1]++;
                }
                int[][] sum = new int[n][n];
                for (int i = 0; i < n; i++){
                    for (int j = 0; j < n; j++){
                        sum[i][j] = div[i][j];
                        if (i != 0) sum[i][j] += sum[i - 1][j];
                        if (j != 0) sum[i][j] += sum[i][j - 1]; 
                        if (i != 0 && j != 0) sum[i][j] -= sum[i - 1][j - 1];
                    }
                }
                return sum;
            }
        }
        
        • 复杂度
          • 时间复杂度: O ( n 2 + q ) O(n^2+q) O(n2+q) q q q q u e r i e s queries queries的长度
          • 空间复杂度: O ( 1 ) O(1) O(1)
      • div数组边界可以+2,方便处理0

        d i v [ 1 : n ] [ 1 : n ] div[1:n][1:n] div[1:n][1:n]计算为二维前缀和数组,在赋值给结果集

        class Solution {
            public int[][] rangeAddQueries(int n, int[][] queries) {
                int[][] div = new int[n + 2][n + 2];
                for (int[] q : queries){
                    div[q[0] + 1][q[1] + 1]++;
                    div[q[0] + 1][q[3] + 2]--;
                    div[q[2] + 2][q[1] + 1]--;
                    div[q[2] + 2][q[3] + 2]++;
                }
                int[][] sum = new int[n][n];
                for (int i = 1; i <= n; i++){
                    for (int j = 1; j <= n; j++){
                        sum[i - 1][j - 1] = (div[i][j] += div[i - 1][j] + div[i][j - 1] - div[i - 1][j - 1]);
                    }
                }
                return sum;
            }
        }
        
  • 进阶:子矩阵元素变化量不定

二维区域和检索 - 矩阵不可变【LC304】

Given a 2D matrix matrix, handle multiple queries of the following type:

  • Calculate the sum of the elements of matrix inside the rectangle defined by its upper left corner (row1, col1) and lower right corner (row2, col2).

Implement the NumMatrix class:

  • NumMatrix(int[][] matrix) Initializes the object with the integer matrix matrix.
  • int sumRegion(int row1, int col1, int row2, int col2) Returns the sum of the elements of matrix inside the rectangle defined by its upper left corner (row1, col1) and lower right corner (row2, col2).

You must design an algorithm where sumRegion works on O(1) time complexity.

  • 思路:在构造方法中生成矩阵matrix的二维累加和数组,在sumRegion方法中通过累加和数组返回指定区域的和

  • 实现

    二维前缀和数组sum,即以当前位置为右下角,matrix数组的左上角为左上角的区域和

    为了方便处理边界0,将sum数组的周围扩展1

    class NumMatrix {
        int[][] sum;
        int m;
        int n;
        public NumMatrix(int[][] matrix) {
            m = matrix.length;
            n = matrix[0].length;
            sum = new int[m + 1][n + 1];
            for (int i = 0; i < m; i++){
                for (int j = 0; j < n; j++){
                    sum[i + 1][j + 1] = sum[i][j + 1] + sum[i + 1][j] + matrix[i][j] - sum[i][j]; 
                }
            }
        }
        
        public int sumRegion(int row1, int col1, int row2, int col2) {
            return sum[row2 + 1][col2 + 1] + sum[row1][col1] - sum[row1][col2 + 1] - sum[row2 + 1][col1];
        } 
    }
    
    /**
     * Your NumMatrix object will be instantiated and called as such:
     * NumMatrix obj = new NumMatrix(matrix);
     * int param_1 = obj.sumRegion(row1,col1,row2,col2);
     */
    
    • 复杂度
      • 时间复杂度:构造方法的时间复杂度为生成二维前缀和数组的时间复杂度 O ( m ∗ n ) O(m*n) O(mn),sumRegion的时间复杂度为 O ( 1 ) O(1) O(1)
      • 空间复杂度: O ( m ∗ n ) O(m*n) O(mn)

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

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

相关文章

神经网络——day67:Residual Network

Deep Residual Learning for Image RecognitionDeep Residual Learning for Image Recognition1. Introduction2. Related WorkResidual Representations(剩余表示).Shortcut Connections(快捷连接).3. Deep Residual Learning3.1. Residual Learning3.2. Identity Mapping by …

Java项目:学生管理系统

Java项目&#xff1a;学生管理系统一、学生管理系统基础版需求1. 初始菜单2. 学生类&#xff1a;3. 添加功能&#xff1a;4. 删除功能&#xff1a;5. 修改功能&#xff1a;6. 查询功能&#xff1a;代码1. 学生类2. 测试类输出结果a. 添加b. 删除c. 修改d. 查询e. 退出二、学生管…

前端监控 二三事

有必要针对 JS 错误做监控吗&#xff1f; 我们可以先假设不对 JS 错误做监控&#xff0c;试想会出现什么问题&#xff1f; JS 错误可能会导致渲染出错、用户操作意外终止&#xff0c;如果没有 JS 错误监控&#xff0c;开发者完全感知不到线上这些异常情况。特别是像电商、支付…

【2-神经网络优化】北京大学TensorFlow2.0

课程地址&#xff1a;【北京大学】Tensorflow2.0_哔哩哔哩_bilibiliPython3.7和TensorFlow2.1六讲&#xff1a;神经网络计算&#xff1a;神经网络的计算过程&#xff0c;搭建第一个神经网络模型神经网络优化&#xff1a;神经网络的优化方法&#xff0c;掌握学习率、激活函数、损…

7. 字符串str的详细讲解

python3字符串str的使用 (1) 基本使用 [a]. Python 中单引号 和双引号 " 使用完全相同&#xff1b; [b]. 使用三引号(单或双)可以指定一个多行字符串&#xff1b; # 长字符串 print( jkl fsf fs fs )[c]. 反斜杠可以用来转义&#xff0c;使用r(raw)可以让反斜杠…

【LeetCode高频100题-3】冲冲冲(持续更新23.1.19)

文章目录62. 不同路径题意解法1 排列组合解法2 动态规划62. 不同路径 题意 一道数学题&#xff0c;排列组合/小学奥赛题。动态规划不是一般来解决最值问题的吗&#xff0c;这道题为什么会想到dp&#xff1f; 解法1 排列组合 从左上角到右下角&#xff0c;一共要走mn-2步&am…

DEJA_VU3D - Cesium功能集 -完整地图标绘及编辑功能系列预告

前言编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合&#xff0c;有自己琢磨实现的&#xff0c;也有参考其他大神后整理实现的&#xff0c;初步算了算现在有差不多实现小140个左右的功能&#xff0c;后续也会不断的追加&#xff0c;所以暂时打算一周2-3更的样…

【算法】克鲁斯卡尔 (Kruskal) 算法

目录1.概述2.代码实现2.1.并查集2.2.邻接矩阵存储图2.3.邻接表存储图2.4.测试代码3.应用本文参考&#xff1a; 《数据结构教程》第 5 版 李春葆 主编 1.概述 &#xff08;1&#xff09;在一给定的无向图 G (V, E) 中&#xff0c;(u, v) 代表连接顶点 u 与顶点 v 的边&#xf…

【6s965-fall2022】剪枝✂pruningⅠ

模型剪枝的介绍 修剪&#xff0c;消除不必要的知识。DNN的知识可以理解为存在于其权重中。 事实证明&#xff0c;许多 DNN 模型可以被分解为权重张量&#xff0c;而权重张量经常包含统计冗余&#xff08;稀疏性&#xff09;。因此&#xff0c;你可以压缩 DNN 的权重张量&…

[从零开始]用python制作识图翻译器·五

测试 通过以上步骤我们终于实现了系统&#xff0c;现在到了紧张刺激的测试环节。直接运行run.py文件: python run.py ::注意需要进入conda环境稍作等等&#xff0c;我们的系统就运行啦&#xff08;啵唧啵唧&#xff09;。 在使用之前&#xff0c;我们还需要在设置中输入自己的…

使用vscode进行C++代码开发(linux平台)

使用vscode进行C代码开发(linux平台一、插件安装二、常用快捷键三、重要配置文件四、实际例子1. 编译并运行一个含有多个文件夹和文件的代码工程2. 编译并运行一个依赖第三方库的代码工程参考资料一、插件安装 执行 ctrl shift x打开插件窗口&#xff0c;然后搜索c插件&…

鸡格线(map操作)

鸡格线 (nowcoder.com) 题目描述 你有一个长为n的数组a&#xff0c;你需要支持以下两种操作: 1、输入l, r, k&#xff0c;对区间[1,r]中所有数字执行a; f(a;)操作k次(式中等号表示赋值操作)&#xff0c;之中f(z)round(10、c)&#xff0c;round为四舍五入函数。 2、输出当前数组…

缓存一致性问题怎么解决

关于Redis的其他的一些面试问题已经写过了&#xff0c;比如常见的缓存穿透、雪崩、击穿、热点的问题&#xff0c;但是还有一个比较麻烦的问题就是如何保证缓存一致性。对于缓存和数据库的操作&#xff0c;主要有以下两种方式。先删缓存&#xff0c;再更新数据库先删除缓存&…

Java 多线程 笔记

文章目录实现方式1. 通过Thread类2. 通过Runnable接口3. 通过Callable接口线程状态线程方法1. 线程停止2. 线程休眠sleep3. 线程礼让yield4. 线程强制执行join5. 线程状态观测getState6. 线程优先级守护线程&#xff08;daemon线程同步 TODO线程死锁Lock锁&#xff08;可重入锁…

Typora+Gitee+PicGo搭建图床

引言 markdown原则上不建议使用base64内嵌图片&#xff0c;因为太麻烦。 如果只是在本机浏览、编辑的话&#xff0c;那引用相对路径或者绝对路径即可&#xff0c;但是考虑到要发布、分享的情况&#xff0c;使用图床是比较好的解决方案。 本教程可以快速得到一个相对稳定的免…

单片机数据、地址、指令、控制总线结构

数据、地址、指令&#xff1a;之所以将这三者放在一同&#xff0c;是因为这三者的实质都是相同的──数字&#xff0c;或者说都是一串‘0’和‘1’组成的序列。换言之&#xff0c;地址、指令也都是数据。 指令&#xff1a;具体可参考文章 由单片机芯片的设计者规则的一种数字…

c程序gcc编译常见报错及解决方法整理

目录一、简介二、常见报错及解决方法1、数组定义错误2、Not enough information to produce a SYMDEFs file3、文件乱码<U0000>4、未定义或未申明报错5、代码中误加入中文三、其他相关链接一、简介 本文主要是整理c程序编译过程的常见报错的解决方法&#xff0c;方便大家…

Leetcode.312 戳气球

题目链接 Leetcode.312 戳气球 题目描述 有 n个气球&#xff0c;编号为0到 n - 1&#xff0c;每个气球上都标有一个数字&#xff0c;这些数字存在数组 nums中。 现在要求你戳破所有的气球。戳破第 i 个气球&#xff0c;你可以获得 nums[i−1]∗nums[i]∗nums[i1]nums[i - 1]…

C++ 类 对象初学者学习笔记

C 类 & 对象 访问数据成员 #include <iostream>using namespace std;class Box {public:double length; // 长度double breadth; // 宽度double height; // 高度// 成员函数声明double get(void);void set( double len, double bre, double hei ); }; // 成员…

两种在CAD中加载在线卫星影像的方法

概述 经常使用CAD的朋友应该会有这样的一个烦恼&#xff0c;就是当加载卫星图到CAD中进行绘图的时候&#xff0c;由于CAD本身的限制和电脑性能等原因&#xff0c;往往不能加载太大的地图图片到CAD内&#xff0c;这里给大家介绍两种在CAD内加载在线卫星影像的方法&#xff0c;希…