gpt4 book ai didi

java - 检查二维数组中的相邻元素并替换它们

转载 作者:行者123 更新时间:2023-12-02 12:08:11 26 4
gpt4 key购买 nike

因此,我正在构建一种方法来检查二维数组中的目标值,并将每个相邻元素替换为该目标值。我实际上已经尝试集思广益了大约一个小时的解决方案,我只是想知道是否有人可以帮助我解决这个问题,这是我到目前为止的代码

 public int[][] replaceValue(int n, int[][]y){
int [][]temp0 = new int[y.length][y[0].length];
int[]top, down ,left, right = new int[y[0].length];
for(int row = 0; row < y.length; row++){
for(int col = 0; col < y[row].length; col++){
temp0[row][col] = y[row][col];// new array so I wouldn't mess with the array passed in
}
}
for(int row = 0; row < temp0.length; row++){
for(int col = 0; col < temp0[row].length; col++){
top[row] = temp0[row-1][col];
down[row] = temp0[row+1][col];
right[row] = temp0[row][col+1];
left[row] = temp0[row] [col-1];
}
}

我收到错误消息,例如我没有初始化顶部、左侧、右侧和向下变量,但我根本不明白逻辑如何检查相邻元素并确保整个数组不会被替换目标值(value)。谢谢

最佳答案

这个问题有点令人困惑,所以我会尝试解释一下。

给你的是一个带有一些整数值的二维数组。你的函数应该扫描二维数组,如果你找到一些目标值, 返回一个二维数组,其中相邻索引也作为目标值。

例如,如果我们有一个 3x3 数组,目标是 2...

1 1 1       1 2 1
1 2 1 ====> 2 2 2
1 1 1 1 2 1

您的问题是您无法想出一种方法来更改该值而不将整个数组更改为 2。

解决方案一:扫描给定数组中的目标值,但更新临时数组中的值。 p>

解决方案二:扫描临时数组,并使用二维 boolean 数组存储是否应更改它。

解决方案一在效率(内存和时间)方面要好得多,所以我只给您我的解决方案#2,然后让您自己完成解决方案一。

此外,请在重要时使用更具描述性的变量名称:P(为什么输入称为 temp?)

public static int[][] replaceValue(int target, int[][] currArray){
int[][] temp = new int[currArray.length][];

//get a boolean array of same size
//NOTE: it is initialized as false
boolean[][] needsChange = new boolean[currArray.length][currArray[0].length];

//copy the current array into temp
for(int i = 0; i < currArray.length; i++){
temp[i] = currArray[i].clone();
}

//Go through each value in the 2d array
for(int i = 0; i < temp.length; i++){
for(int j = 0; j < temp[0].length; j++){
//if it is the target value, mark it to be changed
if(temp[i][j] == target){
needsChange[i][j] = true;
}
}
}

//Go through each value in the 2d array
for(int i = 0; i < temp.length; i++){
for(int j = 0; j < temp[0].length; j++){
if(needsChange[i][j]){ //NOTE: same as "needsChange[i][j] = true;"
//Now, we will check to make sure we don't go out of bounds
//Top
if(i > 0){
temp[i-1][j] = target;
}

//Bottom
if(i + 1 < temp.length){
temp[i+1][j] = target;
}

//Left
if(j > 0){
temp[i][j-1] = target;
}

//Right
if(j + 1 < temp[0].length){
temp[i][j+1] = target;
}
}
}
}

//return the new array we made
return temp;
}

关于java - 检查二维数组中的相邻元素并替换它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46737819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com