精华内容
下载资源
问答
  • python中比如我的个list=['a,b,c,d','e,f,g,h','i,j,k,l']想要变成list2=[[a,b,c,d],[e,f,g,h],[i,j,k,l]]该怎么写代码,求大神指点
  • 这是个三维数组 里面有多个二维数组。 我想三维变成二维的,最后想要的效果是 ``` [2] => Array ( [member_phone] => 16666666666 [order_id] => Array ( [0] => Array ( [order_id] =>...
  • 我们可以看到原始数组中,有很多0的元素,占用了很多的空间,那么我们的目的就是这些0的元素去掉,然后压缩一下这个二维数组变成一个稀疏数组。如下所示本来占用的空间是11x11 现在是3x3是不是减少了很多的...

    絮叨

    很简单的一个题哦,就是类似于压缩,解压想办法节省空间

    题目

    如图一个棋盘,那我们应该怎么保存这个下棋的记录呢?

    b5e5205b6fe1afbe8dd86f6cb776c160.png

    其实我们可以把它变成一个数组来表示,如下图所示。

    d5b95e56b19f0f6de92279ba69be316f.png

    我们可以看到原始数组中,有很多0的元素,占用了很多的空间,那么我们的目的就是把这些0的元素去掉,然后压缩一下这个二维数组,把它变成一个稀疏数组。如下所示

    9dcb1c82d9522ccd44c68d977bd4e089.png

    本来占用的空间是11x11 现在是3x3是不是减少了很多的存储。那么我们在代码中是如何去实现的呢?

    解题思路

    二维数组转稀疏数组的思路

    1. 遍历 原始的二维数组,得到有效数据的个数 sum
    2. 根据sum 就可以创建 稀疏数组 sparseArr int[sum + 1] [3]
    3. 将二维数组的有效数据数据存入到 稀疏数组

    稀疏数组转原始的二维数组的思路

    1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的 chessArr2 = int [11][11]
    2. 在读取稀疏数组后几行的数据,并赋给 原始的二维数组 即可

    代码实现

    package com.code.array;/** * @author 小六六 * @version 1.0 * @date 2020/4/19 13:41 */public class SparseArray {    public static void main(String[] args) {        // 创建一个原始的二维数组 11 * 11        int chessArr1[][] = new int[11][11];        chessArr1[1][2] = 1;        chessArr1[2][3] = 2;        // 输出原始的二维数组        System.out.println("原始的二维数组");        for (int[] row : chessArr1) {            for (int data : row) {                System.out.printf("%d", data);            }            System.out.println();        }        // 将二维数组 转 稀疏数组的思        //先遍历二维数组 得到非0数据的个数        int sum = 0;        for (int i = 0; i < 11; i++) {            for (int j = 0; j < 11; j++) {                if (chessArr1[i][j] != 0) {                    sum++;                }            }        }        //创建对应的稀疏数组        int sparseArr [][]=new int[sum+1][3];        //给稀疏数组赋值,稀疏数组的第一行 表示的是 原数组的大小 和不为0的个数        sparseArr[0][0]=11;        sparseArr[0][1]=11;        sparseArr[0][2]=sum;        int count=0;        //把补位0的位置和值赋值给稀疏数组 从第二行开始        for (int i = 0; i < 11; i++) {            for (int j = 0; j < 11; j++) {                if (chessArr1[i][j] != 0) {                    count++;                    sparseArr[count][0]=i;                    sparseArr[count][1]=j;                    sparseArr[count][2]= chessArr1[i][j];                }            }        }        // 输出稀疏数组的形式        System.out.println();        System.out.println("得到稀疏数组为~~~~");        for (int i = 0; i < sparseArr.length; i++) {            System.out.printf("%d%d%d", sparseArr[i][0], sparseArr[i][1], sparseArr[i][2]);        }        System.out.println();        //将稀疏数组 --》 恢复成 原始的二维数组        //先确定原二维数组的大小        int chessArr2[] [] =new int[sparseArr[0][0]][sparseArr[0][1]];        //在读取稀疏数组后几行的数据(从第二行开始),并赋给 原始的二维数组 所以遍历就从第二行 1开始        for (int i=1;i
    6c62d024711e2fd075018e788c46a29e.png

    结尾

    一个简简单单题目的解题思路,希望大家喜欢。

    作者:六脉神剑
    链接:https://juejin.im/post/5e9b2004e51d4546cf778d8b

    展开全文
  • 我们可以看到原始数组中,有很多0的元素,占用了很多的空间,那么我们的目的就是这些0的元素去掉,然后压缩一下这个二维数组变成一个稀疏数组。如下所示本来占用的空间是11x11 现在是3x3是不是减少了很多的...

    絮叨

    很简单的一个题哦,就是类似于压缩,解压想办法节省空间

    题目

    如图一个棋盘,那我们应该怎么保存这个下棋的记录呢?

    606784c36850f524eac6ed397529eafd.png

    其实我们可以把它变成一个数组来表示,如下图所示。

    88b4129f48af29aa1fcc786e8fba4060.png

    我们可以看到原始数组中,有很多0的元素,占用了很多的空间,那么我们的目的就是把这些0的元素去掉,然后压缩一下这个二维数组,把它变成一个稀疏数组。如下所示

    2eb5f8d8e4ab0fb6208ba9ffc22d2e67.png

    本来占用的空间是11x11 现在是3x3是不是减少了很多的存储。那么我们在代码中是如何去实现的呢?

    解题思路

    二维数组转稀疏数组的思路

    1. 遍历 原始的二维数组,得到有效数据的个数 sum
    2. 根据sum 就可以创建 稀疏数组 sparseArr int[sum + 1] [3]
    3. 将二维数组的有效数据数据存入到 稀疏数组

    稀疏数组转原始的二维数组的思路

    1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的 chessArr2 = int [11][11]
    2. 在读取稀疏数组后几行的数据,并赋给 原始的二维数组 即可

    代码实现

    package com.code.array;
    
    /**
     * @author 小六六
     * @version 1.0
     * @date 2020/4/19 13:41
     */
    public class SparseArray {
    
        public static void main(String[] args) {
    
            // 创建一个原始的二维数组 11 * 11
            int chessArr1[][] = new int[11][11];
            chessArr1[1][2] = 1;
            chessArr1[2][3] = 2;
    
            // 输出原始的二维数组
            System.out.println("原始的二维数组");
            for (int[] row : chessArr1) {
                for (int data : row) {
                    System.out.printf("%dt", data);
                }
                System.out.println();
            }
    
            // 将二维数组 转 稀疏数组的思
            //先遍历二维数组 得到非0数据的个数
            int sum = 0;
            for (int i = 0; i < 11; i++) {
                for (int j = 0; j < 11; j++) {
                    if (chessArr1[i][j] != 0) {
                        sum++;
                    }
                }
            }
    
            //创建对应的稀疏数组
    
            int sparseArr [][]=new int[sum+1][3];
    
            //给稀疏数组赋值,稀疏数组的第一行 表示的是 原数组的大小 和不为0的个数
            sparseArr[0][0]=11;
            sparseArr[0][1]=11;
            sparseArr[0][2]=sum;
            int count=0;
            //把补位0的位置和值赋值给稀疏数组 从第二行开始
            for (int i = 0; i < 11; i++) {
                for (int j = 0; j < 11; j++) {
                    if (chessArr1[i][j] != 0) {
                        count++;
                        sparseArr[count][0]=i;
                        sparseArr[count][1]=j;
                        sparseArr[count][2]= chessArr1[i][j];                }
                }
            }
    
            // 输出稀疏数组的形式
            System.out.println();
            System.out.println("得到稀疏数组为~~~~");
            for (int i = 0; i < sparseArr.length; i++) {
                System.out.printf("%dt%dt%dtn", sparseArr[i][0], sparseArr[i][1], sparseArr[i][2]);
            }
            System.out.println();
    
    
            //将稀疏数组 --》 恢复成 原始的二维数组
    
            //先确定原二维数组的大小
            int chessArr2[] [] =new int[sparseArr[0][0]][sparseArr[0][1]];
            //在读取稀疏数组后几行的数据(从第二行开始),并赋给 原始的二维数组 所以遍历就从第二行 1开始
            for (int i=1;i<sparseArr.length;i++){
                chessArr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
            }
    
            // 输出恢复后的二维数组
            System.out.println();
            System.out.println("恢复后的二维数组");
    
            for (int[] row : chessArr2) {
                for (int data : row) {
                    System.out.printf("%dt", data);
                }
                System.out.println();
            }
        }
    
    }

    b67bc5284002d27f1bde9ddc0791710c.png

    结尾

    一个简简单单题目的解题思路,希望大家喜欢。点个关注呗

    展开全文
  • 创建了个(200,200,2)的三维数组 1.(1)Axis=0 Index=0: (i,j=0,h) j为常量0,i可从0到199之间...由于j也可从0到199之间取值,即Index也可从0到199之间取值,所以总共有200个这样的二维数组。 Index可以从...

    创建了一个(200,200,2)的三维数组

    1.(1)Axis=0  Index=0:

    (i,j=0,h)  j为常量0,i可从0到199之间取值,h可从0到1之间取值,也就把三维变成了二维(200,2)

       (2)Axis=0  Index=1:

    (i,j=1,h)  j为常量1,i可从0到199之间取值,h可从0到1之间取值,也就把三维变成了二维(200,2)

    ....由于j也可从0到199之间取值,即Index也可从0到199之间取值,所以总共有200个这样的二维数组。

    Index可以从-200到199之间取值,但Index=-200和Index=0的情况是相同的;Index=-199和Index=1的情况是相同的....

    即Index=k和Index=k-200d的情况是相同的,其中k从0到199之间取值

     

    2.(1)Axis=1  Index=0:

    (i=0,j,h)  i为常量0,j可从0到199之间取值,h可从0到1之间取值,也就把三维变成了二维(200,2)

       (2)Axis=1  Index=1:

    (i=1,j,h)  i为常量1,j可从0到199之间取值,h可从0到1之间取值,也就把三维变成了二维(200,2)

    ....

    由于i也可从0到199之间取值,即Index也可从0到199之间取值,所以总共有200个这样的二维数组。

    Index可以从-200到199之间取值,但Index=-200和Index=0的情况是相同的;Index=-199和Index=1的情况是相同的....

    即Index=k和Index=k-200d的情况是相同的,其中k从0到199之间取值

     

    3.(1)Axis=2  Index=0:

    (i,j,h=0)  h为常量0,i可从0到199之间取值,j可从0到199之间取值,也就把三维变成了二维(200,200)

       (2)Axis=2  Index=1:

    (i,j,h=1)  h为常量1,i可从0到199之间取值,j可从0到199之间取值,也就把三维变成了二维(200,200)

    ....Index还可取值为-2,-1。我们可以从二维数组中发现,Index=-1和Index=1的情况是相同的;而Index=-2和Index=0的情况相同。

     

     

     

    展开全文
  • 定义了个String数组str[i][j] 某次运行里面的数据如下 srt[0][0]=平面加工方案1 srt[1][0]=平面加工方案1 srt[1][1]=平面加工方案2 srt[2][0]=圆柱加工方案1 srt...以此类推、我该怎么把数组中的字符取出来放在一起?
  • 思路:二维hash,总体思路和一维差不太多,先每行hash,变成一维的数组,再对这个一维数组hash变成二维hash。之前还在想怎么快速一个矩阵的hash算出来,然后看到是尺取,也不知道是什么...这应该算是用到了这个...

    题意:在n*m方格中找有几个x*y矩阵。

    思路:二维hash,总体思路和一维差不太多,先把每行hash,变成一维的数组,再对这个一维数组hash变成二维hash。之前还在想怎么快速把一个矩阵的hash算出来,然后看到是尺取,也不知道是什么...这应该算是用到了这个思想吧。

    要先预处理每行y个的hash(看代码),然后每次算出上面两顶点在第一行的hash值,慢慢往下移。hash看上去就像是在算一个seed位数一样,seed取13那么就是把字符串转化为了一个13位数,这样想可能在移动的时候更容易理解代码的含义。

    代码:

    #include<stack>
    #include<vector>
    #include<queue>
    #include<set>
    #include<cstring>
    #include<string>
    #include<sstream>
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #define ll long long
    #define ull unsigned long long
    using namespace std;
    const int maxn = 1000 + 10;
    const int seed1 = 131;
    const int seed2 = 13131;
    const int MOD = 100013;
    const int INF = 0x3f3f3f3f;
    char s[maxn][maxn],str[maxn];
    ull ha[maxn][maxn];
    int T;
    int n, m, x, y;
    int solve(ull aim){
        ull bit = 1;
        for(int i = 1; i <= y - 1; i++)
            bit = bit * seed1;
        for(int i = 1; i <= n; i++){    //预处理每一行的hash
            ull sum = 0;
            for(int j = 1; j <= y - 1; j++){
                sum = sum * seed1 + s[i][j];
            }
            for(int j = y; j <= m; j++){
                sum = sum * seed1 + s[i][j];
                ha[i][j - y + 1] = sum;
                sum -= bit * s[i][j - y + 1];
            }
        }
        int ans = 0;
        bit = 1;
        for(int i = 1; i <= x - 1; i++)
            bit = bit * seed2;
        for(int j = 1; j <= m - y + 1; j++){
            ull sum = 0;
            for(int i = 1; i <= x - 1; i++){
                sum = sum * seed2 + ha[i][j];
            }
            for(int i = x; i <= n; i++){
                sum = sum * seed2 + ha[i][j];
                if(sum == aim) ans++;
                sum -= bit * ha[i - x + 1][j];
            }
        }
        return ans;
    
    }
    int main(){
        scanf("%d", &T);
        while(T--){
            scanf("%d%d", &n, &m);
            for(int i = 1; i <= n; i++)
                scanf("%s", s[i] + 1);
            scanf("%d%d", &x, &y);
            ull temp, aim = 0;  //先对x*y二维hash
            for(int i = 1; i <= x; i++){
                scanf("%s", str + 1);
                temp = 0;
                for(int j = 1; j <= y; j++){
                    temp = temp * seed1 + str[j];
                }
                aim = aim * seed2 + temp;
            }
            printf("%d\n", solve(aim));
        }
        return 0;
    }

     

    转载于:https://www.cnblogs.com/KirinSB/p/9525867.html

    展开全文
  • 这篇的题目还是来自每日一题的打卡题目,今天的题目是在昨天一维数组的基础上变成二维的矩阵,求矩阵一个区域内的元素和。先看一下题目吧。 题目描述 LeetCode地址:二维区域和检索-矩阵不可变 我的解法 作为...
  • 1、 矩阵变成一维然后排个序 2、 合并有序数组那样合并 3、 分 主要说怎么求。 分一个第k大是多少。 check的时候,也就是判断有没有k个数大于等于mid 比mid小的肯定在是左上角一些元素。 比如这样一个矩阵...
  • 这个变换数据变换到个新的坐标系统中,使得任何数据投影的第大方差在第个坐标(称为第主成分)上,第大方差在第个坐标(第主成分)上,依次类推。主成分分析经常用于减少数据集的数,同时保持数据集的...
  • 传送门 题解: 考虑保留[l,r][l,r][l,r]的点的时候xxx所在的联通块怎么表示。 考虑点分治的时候第分治中心放到这个...离线,二维数点,树状数组维护一下就没了。 代码: #include<bits/stdc++.h> #d...
  • Python技巧100题(七)

    2020-08-22 19:48:22
    怎么通过reverse参数对序列进行降序排列3.numpy怎么把一维数组变成二维数组4.快速插入元素到列表头部5.字典的创建方法6.通过次查询给字典里不存在的键赋予新值7.统计字符串中元素出现的个数8.列表去重9.求m中元素...
  • 不同于上一道题从上到下打印二叉树,这道题要求每一行输出一个数组,而不是一个一维数组,需要变成二维数组 所以问题的难点就来了: 怎么确定哪些元素是来自同一行呢?? 接下来介绍两种方法,能够很巧妙地确定...
  • 最近刷题的时候发现要用到树的结构,当时脑子就宕机咯,不知道...已知一颗二叉树在白纸上,我的习惯是变成一二维数组(也就相当于层序遍历,但是在结点为null的位置插入0),之后依据这个二维的数组建立一个对...
  • 为了提高效率,我原始csv已经赋值给了数组,这个数组就变成二维数组了,其中包含的内容就是14万个列表,但是想扩展这些列表的长度就没办法了 怎么搜索都搜索不到 后来想了个办法就是新建个同样shape的数组,...
  • [bzoj 1452--JSOI2009]Count

    2018-03-23 10:34:14
    其实非常简单,多开一维变成维数组,因为权值的范围很小,这一点应当注意。那这道题就很简单了,询问的时候就只要一个矩阵切来切去就可以得到你想要的矩阵了。 #include&lt;cstdio&...
  • 从原来的单纯二维数组变成四维数组。 如数组 Dimemsion[a][b][c][d] ,a,b代表原来旧一代机器人的方位坐标。 c代表障碍的高度(如果是0,则代表这个地方为平地),d代表这个“床底”的高度(超过机器人高度,...
  • 一开始在考虑这个R要怎么处置,后来突然想到直接他加到结束时间e后面即可,然后对endtime进行排序,然后找出状态转移方程即可,由于给的数字比较大,我们可以先写成二维的,然后再对二维数组进行压缩变成一维的。...
  • 怎么将获取的数据变成二维数组后供JS使用呢? 下面就是我从flask获取了userthings这个变量,是从数据库中获取的符合条件的若干行, 我现在只能像代码段中的这样循环中调取不同行中的不同列的...
  • 数据结构 一元多项式运算

    千次阅读 2018-04-20 17:49:14
    对其进行合并同类项,在乘法运算达到了O(n^3),可以优化的地方是先对结果链表C进行预处理,先复制这个链表给C,然后表C的操作过程就将了一维变成O(n^2),并且每次可以利用链表的有序性这一点进行分,但这是链表...
  • 个byte[]数组转成Bitmap,再在Image控件里显示, 问题在byte[]里面有好几副图像,怎么一次只显示一张,点显示button时...现在图片变成二维的byte[][], 问题是,在BUTTON下转成bitmap以后怎么在IMAGE控件上显示
  • (1)将参数空间(ρ,θ)量化,赋初值二维矩阵M, M(ρ,θ)就是个累加器了。 (2)然后对图像边界上的每个点进行变换,变换到属于哪组(ρ,θ),就该组(ρ,θ)对应的累加器数加1,这里的需要变换的点...
  • ExtAspNet是组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果, 目标是创建没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome ...
  • excel的使用

    2012-11-25 17:06:01
    实际输入的时候,通常应用等差数列输入法,先输入前个值,定出自变量中数与数之间的步长,然后选中A2和A3两个单元格,使这变成一个带黑色边框的矩形,再用鼠标指向这黑色矩形的右下角的小方块“■”,当光标...
  • 这时候 <code>props.children</code> 会是数组,否则的话只是个对象。因此我们需要注意在对 <code>props.children</code> 进行遍历的时候要注意它是否是数组</strong>,当然你也可以利用 <code>...
  • ExtAspNet_v2.3.2_dll

    2010-09-29 14:37:08
    ExtAspNet是组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果, 目标是创建没有ViewState,没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 支持的浏览器: IE 7.0+, Firefox...

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

怎么把二维数组变成一维数组