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



我写了一个方法,用于查找和推导矩阵中最大数量的递增(递减(元素,连续进行。但似乎代码不是很好。

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, -2, -1}, {5, -3, -4, 2, 5}, {4, 4, -2, 3, 5}, {-2, 5, 4, 0, 0}}

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

在扁平化矩阵的代码中,c在每次通过外部循环时都会重置,因此只有矩阵的最后一行才真正进入oneArray。将int c = 0;行移出循环将允许将整个矩阵复制到oneArray,以便代码可以找到最后一行之外的序列。

最新更新