【问题标题】:How to filter matrix of char to get a smaller matrix with filtered results?如何过滤 char 矩阵以获得具有过滤结果的较小矩阵?
【发布时间】:2017-10-13 18:44:11
【问题描述】:

给定一个矩阵 A:

[[C,c,c,c,a,a,b],
 [1,3,3,3,2,2,1]]

其中第一行有字符 AZ 和 az,第二行有数字,表示给定字母在矩阵中出现的次数,如何编写代码来获取矩阵 A 并将其转换为矩阵 B,其中 B 是:

[[C,c,a,b],
 [1,3,2,1]]

第一行没有显示重复的字母,但第二行保留了字母重复的原始次数?

这是我迄今为止尝试过的:

for(i=0;i<matrixA.length;i++){
   if(matrixA[0][0] == matrixA[0][1]){  
   matrixB[0][0] = matrixA[0][0]
   matrixB[1][0] = matrixA[1][0]
   }
}

我该如何解决这个问题?

【问题讨论】:

    标签: java arrays matrix


    【解决方案1】:

    我意识到您不能简单地删除数组中的重复项,因为您的 matrixB 将是:

    [[C, c, a, b],
     [1, 3, 2]] //final '1' removed as it is a "duplicate" of the first
    

    所以我建议改用这种方法:

    Object[][] matrixA = {
        {'C','c','c','c','a','a','b'},
        {1,3,3,3,2,2,1}};
    ArrayList<Object> rowHolder = new ArrayList<>();
    
    for(int i = 0; i < matrixA.length; i++){ //for each row
        int j;
        for(j = 0; j < matrixA[i].length-1; j++){ //for each element
            if(matrixA[i][j] != matrixA[i][j+1]) //keep element if next element is different
                rowHolder.add(matrixA[i][j]);
        }
        rowHolder.add(matrixA[i][j]); //add last element always (next element doesn't exist)
        matrixA[i] = rowHolder.toArray(); //convert rowHolder to row
        rowHolder.clear(); //reset for next row
        System.out.println(Arrays.toString(matrixA[i]));
    }
    

    这给出了预期:

    [C, c, a, b]
    [1, 3, 2, 1]
    

    这里唯一的丑陋之处是必须对矩阵和ArrayList 类型都使用Object。这是由于具有混合类型的二维数组,以及 Java 中基元和对象之间转换的限制。如果您使用自定义转换器而不是 ArrayList#toArray,则 matrixA 可以是 int[] 类型,而 rowHolder 具有通用参数 Integer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多