程序到2D数组复杂对齐

时间:2019-03-10 01:59:03

标签: javascript java python arrays multidimensional-array

给出2D数组,其中有2组数组,第一组未正确对齐,第一组中有一个空格,第一组应与第二组对齐。 2套的长度相同。但是在第一组中,直到第二组开始之前都有空列。

我们需要编写一种算法,该算法将删除第一组中不必要的空格。在给定的示例空间中,第1列到第8行之间有空格,如果有更多空白,则应基于此条件将其删除。约束是如果只有一个空格,我们不应该删除。

输入

[[,1,,2,,3,,4,],
 [,1,,2,,3,,4,],
 [,1,,2,,3,,4,],
 [,1,,2,,3,,4,],
 [,1,,2,,3,,4,],
 [,1,,2,,3,,4,],
 [,1,,2,,3,,4,],
 [,1,,2,,3,,4,],


 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,]
]

输出数组

[

 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,]


 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,],
 [1,2,3,4,,,,,]

]
  1. 只有第一个集合会出现对齐问题,其余所有集合都没有对齐问题。我们不应该更改其余集合。
  2. 首先,我们需要找出集合信息。
  3. 如果每个集合中都有一列为空,那么我们需要删除该集合。
  4. 我们不应该基于一个空格来决定集合,而应该基于整个列中10%的空格来决定。
  5. 我们不应该删除所有空格,只有在整个列中有10%以上的空格时才应该删除。
  6. 数据不是数字,而是字符串。空空格不过是空字符串(“”)

我写了不同的算法,但似乎没有任何效果。

一种算法是发送格式数组和输入数组。但这不能解决问题。

  alignArray(arr1, arr2) {
    let arr3 = [];
    let arr4 = _.compact(arr2);
    let count = 0;
    _.map(arr1, function (num, index) {
      if (_.isString(num) && !(_.isEmpty(num))) {
        if (arr4[count])
          arr3.push(arr4[count]);
        else
          arr3.push("");
        count++;
      } else {
        arr3.push("");
      }
    });
    return arr3;
  }

边缘案例:

  1. 应该有一些与第一套相似的套。

    [[,1,,2,,3,,4,],  [,1,,2,,3,,4,],  [,1,,2,,3,,4,],  [,1,,2,,3,,4,],  [,1,,2,,3,,4,],  [,1,,2,,3,,4,],  [,1,,2,,3,,4,],  [,1,,2,,3,,4,],

    [1,2,3,4 ,,,,,],  [1,2,3,4 ,,,,,],  [1,2,3,4 ,,,,,],  [1,2,3,4 ,,,,,],  [1,2,3,4 ,,,,,],  [1,2,3,4 ,,,,,],  [1,2,3,4 ,,,,,],  [1,2,3,4 ,,,,,],  [1,2,3,4 ,,,,,],

    [,1,,2,,3,,4,],  [,1,,2,,3,,4,],  [,1,,2,,3,,4,],  [,1,,2,,3,,4,],  [,1,,2,,3,,4,],  [,1,,2,,3,,4,],  [,1,,2,,3,,4,],  [,1,,2,,3,,4,] ]

1 个答案:

答案 0 :(得分:1)

您可以先获取模式,为该模式构建一个过滤器模式,然后通过使用过滤器模式过滤值来映射数组。

  

例如,此数组包含三个不同的字符串,并且字符串的模式是拆分后的字符串的真实值,其中falsy(缺失值)为1或0。

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main()
{
  char array1[]="12", array2[]="98";
  int l1, l2;
  char c;

  errno = 0;
  if ((sscanf(array1, "%d%c", &l1, &c) != 1) || errno){
    printf("not (only) a valid int in '%s'\n", array1);
    return -1;
  }

  if ((sscanf(array2, "%d%c", &l2, &c) != 1) || errno) {
    printf("not (only) a valid int in '%s'\n", array2);
    return -1;
  }

  printf("%d + %d = %d\n", l1, l2, l1+l2);
}
     

在获得具有模式和这些模式的计数的对象之后,通过查看模式计数与总计数之间的关系是否大于pi@raspberrypi:/tmp $ gcc -pedantic -Wextra a1.c pi@raspberrypi:/tmp $ ./a.out 12 + 98 = 110 来添加过滤模式,然后将整个模式用于过滤或通过添加按列的真实值来构建新的过滤器模式。将检查此总和,并且如果与',1,,2,,3,x,4,' // 010101010 ',1,,2,,3,,4,' // 010101010 '1,2,3,4,,,,,' // 111100000 的关系大于0.1,则此列将包含在过滤器模式中。

     

对象total的结果如下:

0.1
     

结果,所有列均由数组模式的过滤器模式过滤。

columns
{
    111100000: {
        count: 9,
        filter: "111100000"
    },
    "010101110": {
        count: 1,
        filter: "010101010"
    },
    "010101010": {
        count: 8,
        filter: "010101010"
    }
}