我想在包含隨機值的 x 行和 x 列的方形二維陣列中找到峰值,并且峰值應該是陣列中的最高值,并且也高于它的 4 個鄰居,北,南,西,東。
uj5u.com熱心網友回復:
蠻力表明您只是在查看所有可能性的陣列。如果是這種情況,您應該只查看陣列中的每個值。此外,如果該值是陣列中的最高值,則保證該值高于其鄰居。如果您想在陣列中找到位置,您可以執行以下操作。
編輯:由于 OP 指定峰值必須高于任何鄰居,因此您必須為北、南、東和西添加一個引數。您只需要更改if陳述句。您會注意到,我還檢查了x和y回圈的位置,因為,比如說,對于北方,如果y == 0,那么沒有行超過它,所以我們不應該進一步檢查我們正在測驗的峰值的北部。更新以下內容:
// changing test case. The new answer will be 4:
int[][] array = {{2, 3, 4, 6},
{4, 3, 9, 9},
{3, 2, 1, 5}};
int maxX = 0, maxY = 0; // the location of maximum value to start
int maxFound = 0; // assuming positive values
for (int x = 0; x < array.length; x ) {
for (int y = 0; y < array[x].length; y ) {
// if current value in array at (x, y) is greater than maxFound,
// update maxFound, maxX, and maxY:
if (maxFound < array[x][y] &&
(x == 0 || (array[x - 1][y] < array[x][y])) && // WEST
(y == 0 || (array[x][y - 1] < array[x][y])) && // NORTH
(x == array.length - 1 || (array[x 1][y] < array[x][y])) && // EAST
(y == array[x].length - 1 || (array[x][y 1] < array[x][y]))) {
maxFound = array[x][y];
maxX = x;
maxY = y;
}
}
}
System.out.println("The max was: " maxFound " at position: " maxX " " maxY);
我不確定這是否是您想要的,但線性搜索未排序的陣列不一定是蠻力。無論哪種方式,您都必須查看 2D 陣列中的每個值,因此,如果您想知道復雜性,線性O(n)哪里n = array.length * array[0].length可能會盡可能快,除非 2D 陣列在我們開始使用它之前處于某種更排序的結構中.
uj5u.com熱心網友回復:
嘗試這個。
public static void main(String[] args) {
int[][] matrix = {{ 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }};
int peak = Stream.of(matrix)
.flatMapToInt(row -> IntStream.of(row))
.max().getAsInt();
System.out.println(peak);
};
輸出:
8
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/368641.html
