连续查找矩阵中最大数量的增减元素

时间:2019-02-12 19:38:12

标签: java arrays

我写了一种查找和推导矩阵中递增(递减)元素数量最多的方法。但是似乎代码不是很好。

private void findLargestIncreasingAndDecreasingElements() {
    int[][] matrix = getMatrix();
    int[] oneArray = new int[matrix.length * matrix.length];
    int r = 0;
    int min = 0;
    int max = 0;
    int h = 0;
    int m = 0;
    int h1 = 0;
    for (int[] x : matrix) {
        int c = 0;
        for (int z : x) {
            oneArray[c++] = z;
        }
    }
    for (int i = 0; i < oneArray.length - 1; i++) {
        if (oneArray[i] < oneArray[i + 1]) {
            r += 1;
            if (r > max) {
                max = r;
                h = i + 1;
            }
        } else {
            r = 0;
        }
        if (oneArray[i] > oneArray[i + 1]) {
            m += 1;
            if (m > min) {
                min = m;
                h1 = i + 1;
            }
        } else {
            m = 0;
        }
    }
    System.out.println("Maximum sequence of increasing numbers:");
    int[] l = new int[max + 1];
    System.arraycopy(oneArray, (h - max), l, 0, (max + 1));
    System.out.println(java.util.Arrays.toString(l) + " " + (max + 1));
    System.out.println("Maximum sequence of decreasing numbers:");
    int[] t = new int[min + 1];
    System.arraycopy(oneArray, (h1 - min), t, 0, (min + 1));
    System.out.println(java.util.Arrays.toString(t) + " " + (min + 1));
}

也许有人知道如何使算法更好?

有时输出不正确。例如: {{-3,-3,3,-5,2},{1,-2,5,5,-2,-1},{5,-3,-4,2,5},{4,4, -2、3、5},{-2、5、4、0、0}}

输出增量:[-2,5] 虽然有[-2,3,5]

1 个答案:

答案 0 :(得分:0)

在拉平矩阵的代码中,c在每次通过外循环时都会重置,因此实际上只有矩阵的最后一行将其放入oneArray中。将int c = 0;行移出循环将允许将整个矩阵复制到oneArray中,以便您的代码可以找到最后一行之外的序列。