我有一个二维数组,我想在其中找到两个给定位置之间的中间位置: 下面的例子显示了每个位置的索引。
00, 01, 02, 03
10, 11, 12, 13
20, 21, 22, 23
30, 31, 32, 33
输入:
对于位置
23
和33
我应该得到输出位置31
。 这里的输入是 iStart 为 2,jStart 为 3,类似地,iEnd 为 3,jEnd 为 3 预期的 o/p 为 i_mid = 3 且 j_mid = 1对于位置
00
和22
我应该得到输出位置11
。 这里输入 iStart 为 0,jStart 也为 0,同样 iEnd 和 jEnd 等于 1 预期的 o/p 为 i_mid = 1 且 j_mid = 1对于位置
02
和23
我应该得到输出位置12
。 这里的输入是 iStart 为 0,jStart 为 2,类似地,iEnd 为 2,jEnd 为 3 预期的 o/p 为 i_mid = 1 且 j_mid = 2- 对于位置
10
和31
我应该得到输出位置20
。 这里的输入是 iStart 为 3,jStart 为 1,类似地,iEnd 为 3,jEnd 为 1 预期的 o/p 为 i_mid = 2 且 j_mid = 0
我发布了为了计算我们还应该知道数组的长度,因为它是 n
xm
矩阵,即。 i
可以走的最大值是 n
,j
可以走的最大值是 m
。
因此,对于 n
xm
数组,iMax
将为 n
,jMax
将为米
现在该函数可以表示为:
void getMiddle(int iStart, int jStart, int iEnd, int jEnd, int iMax, int jMax) {
//We need to find the mid_i and mid_j of the input positions
System.out.println("midd_i = "+ mid_i +" and midd_j = "+mid_j);
}
我通过暴力方法解决了这个问题,但是我正在寻找最佳解决方案。
在我的方法中,首先我找到给定位置之间可以出现的元素数量,然后将元素数量除以 2 并遍历该位置,直到可以出现的元素的一半,因为该点将是中间位置,我的解决方案如下:
void getMiddle(int iStart, int jStart, int iEnd, int jEnd, int jMax) {
int numberOfRows = (iEnd - iStart) + 1;
int totalElementsInRows = jMax * numberOfRows;
int eliminateStartElements = jStart;
int eliminateEndElements = (jMax - 1) - jEnd;
int totalElementsPresentBetweenPositions = totalElementsInRows - (eliminateStartElements + eliminateEndElements);
int halfElement = totalElementsPresentBetweenPositions/2;
int countElement = 0;
for(int i = iStart; i<= iEnd; i++) {
for(int j = 0; j< jMax; j++) {
countElement++;
if(halfElement == countElement) {
System.out.println("midd_i = "+ i +" and midd_j = "+j);
break;
}
}
}
}
我确信应该有一个最佳解决方案,如果有人有最佳解决方案,请帮忙。
最佳答案
这是错误的做法,请参阅下面的评论部分。
/////////////////////////////////////
您可以找到点之间的平均值。当您有 A 点和 B 点时。程序必须计算二维平均值:x=(Ax + Bx)/2
。 y 轴也是如此。
您不必担心数字末尾附加的 .5,因为 Java 会为您截断它。
关于java - 如何找到二维数组中两个给定位置之间的中间位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61020863/