Возвращаемая позиция значения в 2D массиве, Java - PullRequest
0 голосов
/ 07 декабря 2011

Я устал. Это должно быть просто. лес ... для .... деревьев ....

Я пытаюсь вернуть позицию определенного значения в двумерном массиве.

У меня есть двойной массив [300] [300].

Все значения, содержащиеся в нем, равны 0, кроме значения 255.

Как мне написать метод для возврата местоположения [i] [j] 255?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 07 декабря 2011

Просто переберите все элементы, пока не найдете тот, который 255:

for ( int i = 0; i < 300; ++i ) {
    for ( int j = 0; j < 300; ++j ) {
        if ( array[i][j] == 255 ) {
            // Found the correct i,j - print them or return them or whatever
        } 
    }
}
2 голосов
/ 07 декабря 2011

Это работает:

public int[] get255() {
  for(int i = 0; i < array.length; i++)
    for(int j = 0; j < (array[i].length/2)+1; j++)
      if(array[i][j] == 255)
        return new int[] {i,j};
      else if(array[j][i] == 255) //This just slightly increases efficiency
        return new int[] {j,i};
  return null; //If not found, return null
}

Это, возможно, самый быстрый, хотя. Он проверяет начало в каждом углу, постепенно работая внутрь к центру, сначала по горизонтали, затем по вертикали:

public int[] get255() {
  for(int i = 0; i < (array.length/2)+1; i++)
    for(int j = 0; j < (array[i].length/2)+1; j++)
      // Check the top-left
      if(array[i][j] == 255)
        return new int[] {i,j};

      // Check the bottom-left
      else if(array[array.length-i][j] == 255)
        return new int[] {array.length-i,j};

      // Check the top-right
      else if(array[i][array[i].length-j] == 255)
        return new int[] {i,array[i].length-j};

      // Check the bottom-right
      else if(array[array.length-i][array[i].length-j])
        return new int[] {array.length-i, array[i].length-j};

  return null; //If not found, return null
}
0 голосов
/ 01 июня 2016

Вы можете использовать бинарный поиск для каждого столбца.

Используйте для цикла , чтобы выполнить итерацию по каждому столбцу, так как это двумерный массив.

Как только вы получите все строки из конкретного столбца, который вы итерируете (это будет другой массив), выполните бинарный поиск по ним.

Применяемые условия: 1. Если массив отсортирован. 2. Если вы уверены, что в каждом столбце есть только один элемент. (Без дубликатов). 3. Если в строках есть дубликаты (выполните линейный поиск).

Надеюсь, это поможет. Пожалуйста, не стесняйтесь спрашивать, если все еще сомневаетесь:)

...