안전 요약을 증명하기 위해 제공 - 2 차원 배열을 찾기

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        if (array.size() == 0) {
            return false;
        }
        int rows = array.size();
        int cols = array[0].size();
        int j = cols - 1;
        int i = 0;
        while(i < rows && j >= 0) {
            if(array[i][j] < target) {
                ++i;
            }
            else if(array[i][j] > target) {
                --j;
            }
            else{
                return true;
            }
        }
        return false;
    }
};

이 아이디어는 매우 간단한 질문, 우리는 항목을 볼 수 있습니다 :

초점에 위에서 아래로 순서를 오름차순으로 정렬됩니다 종류의 각 열을 오름차순 순서대로 왼쪽에서 오른쪽으로 각 행 . 할 수 있습니다 우리의 아이디어가 시작됩니다 :

  1. 상기 0의 마지막 행에서 마지막 행의 첫 번째 행으로부터 이송됩니다
  2. 때마다 목표를 비교하고 숫자로 와서, 발견 반환하는 경우true
  3. 끝으로 통과 한 후, 목표는 false를 반환 발견되지 않았다

이 가능하지만 2 차원 배열이 매우 큰 경우 (아마 시간 복잡성 것이다 많은 시간을 소비 n^2주체의 요구 사항을 충족 할 수 없습니다, 2 차원 배열의 사각형 및 사후보다는 목표 것을 제공) 그래서 우리는 그림에 위의 초점에 따라 최적화되어야한다 :

  1. 우선, 우리가이 큰 것보다 우리의 목표는 당신이 비교를 위해 다음 행으로 바로 이동할 수 있다는 것을 발견 그렇다면, 가장 오른쪽 자리입니다 줄의 끝이,이 라인에서 가장 큰 수치이다 확실하다
  2. 가장 오른쪽 자리가 목표보다 큰 경우, 왼쪽에 또는 아래, 우리는 먼저 사건의 대상 번호를 찾기 위해 왼쪽으로 이동을 고려 우리가 찾고있는 대상만을 결정할 수있다
  3. 우리는 두 경우가 왼쪽으로 이동하면, 현재의 숫자는 대상의 수보다 큰 경우, 우리가 상황에 마지막이 될 것이다, 왼쪽으로 이동 계속 목표보다 작은 숫자뿐만 아니라, 대상 수보다 여전히 크다 때문에 "각 열에 대상보다 더 많은 수의, 아래로 가면, 현재 대형에 비해 다음과 같은 번호를 찾을 수 있기 때문에, 비교할만한 수치 없었다 판단 할 수있는 경우 (대상 수보다 적은 후자의 경우, 우리가 라인에 디지털 숫자의 목표보다 결정보다 채택과 최대 숫자 전에 라인에 있기 때문에, 증가 위에서 아래의 순서로 "위로가는 경우 분류되어, 목표도 확실히 줄에 의지, 그러므로 직접주기의 끝 오프, 반환 false)
  4. 우리는 숫자가 같은 열에서 한 줄에 숫자보다 큰 다음 줄을 결정할 수 있기 때문에 당신이 확인할 수 있도록 우리가 똑바로 갈 대상 수보다 작은, 그래서의 디지털 시간 정렬 때문에, 말은, 다음 행으로 반환 할 필요가 없습니다 현재의 수보다 오른쪽에있는 숫자는 (목표 그림은 라인의 오른쪽에있는 숫자보다 작은, 그리고 행의 같은 열보다 떨어져 큰 숫자의 오른쪽에있는 현재의 행의 수 때문에), 그리고 우리가 그 상황으로 돌아 커야하는 경우 2는 유사한 절차, 목표보다 큰 대상보다 하향 이동 작은 이동을 남긴 발견 ......

, 우리가해야 할 요약하면 것은 :

  1. 오른쪽 비교하여 큰 이동 된 좌측, 소형의 하향 운동에서 시작하여 맨 위 행에서
  2. 이 사이클을 잘라가있을 때 (즉, 경계를 넘어) 다음에 맨 아래 행보다 왼쪽보다 왼쪽에있는 대부분의를 통과하면, 반환false

추천

출처www.cnblogs.com/yejianying/p/jianzhioffer_2d_array_searching.html