java - 如何找到二维数组中两个给定位置之间的中间位置

标签 java optimization logic

我有一个二维数组,我想在其中找到两个给定位置之间的中间位置: 下面的例子显示了每个位置的索引。

00, 01, 02, 03
10, 11, 12, 13
20, 21, 22, 23
30, 31, 32, 33

输入:

  • 对于位置 2333 我应该得到输出位置 31。 这里的输入是 iStart 为 2,jStart 为 3,类似地,iEnd 为 3,jEnd 为 3 预期的 o/p 为 i_mid = 3 且 j_mid = 1

  • 对于位置0022我应该得到输出位置11。 这里输入 iStart 为 0,jStart 也为 0,同样 iEnd 和 jEnd 等于 1 预期的 o/p 为 i_mid = 1 且 j_mid = 1

  • 对于位置0223我应该得到输出位置12。 这里的输入是 iStart 为 0,jStart 为 2,类似地,iEnd 为 2,jEnd 为 3 预期的 o/p 为 i_mid = 1 且 j_mid = 2

  • 对于位置 1031 我应该得到输出位置 20。 这里的输入是 iStart 为 3,jStart 为 1,类似地,iEnd 为 3,jEnd 为 1 预期的 o/p 为 i_mid = 2 且 j_mid = 0

我发布了为了计算我们还应该知道数组的长度,因为它是 nxm 矩阵,即。 i 可以走的最大值是 nj 可以走的最大值是 m。 因此,对于 nxm 数组,iMax 将为 njMax 将为

现在该函数可以表示为:

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/

相关文章:

java - 从单元测试中产生一个单独的进程

PHP 逐行读取 CSV 文件 - 比较前一行的数据

python - 优化查找可以比较的数组对

c++ - 内联汇编会影响可移植性吗?

c - 使用 C/Intel 程序集寻求最大位图(又名位数组)性能

javascript - 通过使用 jQuery/JS 检查两种不同的命名约定来检查文件是否存在

logic - 这里有逻辑漏洞吗?

java - Java 中窗口框架关闭时不执行任何操作

java - 关于简洁类模型/模式的建议,以解决方法中的多个细微变化

java - 如何将模型的genericgenerator中的参数传递给另一个类(IdGenerator)