2017-02-22 10 views
1

У меня есть метод ниже, который получает двумерный массив и значение. Метод проверяет, находится ли значение в массиве или нет.У меня есть метод ниже, который получает двумерный массив и значение. Метод проверяет, находится ли значение в массиве или нет.

Я не понимаю, зачем мне нужна строка кода, который я выделил жирным (если (M [I] [M [] .Length-1] < = VAL).

это кажется, что код работает без этой линии, а также ... Почему я все еще нужна эта линия, может кто-нибудь объяснить мне, пожалуйста? спасибо

public static boolean findValWhat (int[][] m, int val) 
{ 
    for (int i = 0; i < m.length; i++) { 
     **if (m[i][m[i].length-1] <= val){** 
      if (binarySearch(m[i], val) == val){ 
       return true; 
      } 
     } 
    } 

    return false; 

} 
+0

Я полагаю, вы тратите один дополнительный запрос на поиск, учитывая, что ваша функция бинарного поиска не зависит от этой границы, но все еще находится под ее влиянием. –

ответ

0

код будет работать и без него, но она позволяет его работать быстрее. Допустим, у вас есть этот отсортированный 2-й массив: [[1,2,3], [4,5,6], [7,8,9]] Затем вы можете видеть, что если вы ищете 8, вам не нужно делать двоичный поиск для первой строки, потому что 3 меньше, чем 8, и он самый большой номер там. Вы даже можете сделать это тестовое слово, выполнив двоичный поиск вместо цикла.