我写了一种查找和推导矩阵中递增(递减)元素数量最多的方法。但是似乎代码不是很好。
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]
答案 0 :(得分:0)
在拉平矩阵的代码中,c
在每次通过外循环时都会重置,因此实际上只有矩阵的最后一行将其放入oneArray
中。将int c = 0;
行移出循环将允许将整个矩阵复制到oneArray
中,以便您的代码可以找到最后一行之外的序列。