주문 2 차원 배열 검색 : 제공 한 제목 승리

항목 1 : 정렬 2 차원 배열 됨

제목 설명

(동일한 각각의 1 차원 배열의 길이) 위에서 아래로 증가하는 순서로 2 차원 어레이의 각 열에 정렬, 오름차순 정렬의 순서로 좌측에서 우측으로 각각의 행. 완전한 기능, 예컨대 2 차원 어레이와 정수,는 정수 배열을 포함하는지 여부를 판정 입력한다.

사고

A는 생각했다 : 폭력 알고리즘

어레이의 각 요소는, 비교를 통과.

시간 복잡도 : O (N * N);

규칙적인 배열의 조건 : 사용되지

 /**
     *
     * @param target  待查询的目标
     * @param array  二维数组
     * @return
     * 思路:遍历整个二维数组,穷举所有的目标进行比较
     * 210ms 16784k
     */
    public boolean Find1(int target, int [][] array) {

        for(int i=0;i<array.length;i++){//遍历行
            for(int j=0;j<array[0].length;j++){//遍历列
                if(array[i][j]==target){
                    return true;
                }
            }
        }
        return false;
    }

생각이 : 각 행에 대한 이진 검색을 사용하여

데이터의 각 행이 정렬되기 때문에 일차원 배열 순서는,이 광고를 검색 이진 수행하고, 시간 복잡도는 O (log2n) 인

행의 N 연속 사용 이진 탐색 시간의 복잡성은 : O (nlogn)

//193ms
public static  boolean Find4(int target,int[][] array){

        for(int i=0;i<array.length;i++){//遍历每一行

            int left = 0;
            int right = array[0].length-1;
            int mid = (left+right)/2;

            while(left<=right){
                mid = (left+right)/2;
                if(array[i][mid]>target){//数组中的值比目标值大,则从左半部分再查找
                    right = mid-1;
                }else if(array[i][mid]<target){
                    left=mid+1;
                }else{
                    return true;//找到
                }

            }

        }
        return  false;

    }

세 가지 아이디어 : 상단 오른쪽 또는 왼쪽 하단 변환에서 비교

[이미지 소스 스테이션이 보안 체인 메커니즘을 가질 수있다 체인 실패 덤프는 직접 업로드 눌러 사진을 저장하는 것을 권장 (IMG-yJmv0j8i-1,579,150,525,148) (이미지 / 01.png)]

매트릭스는 주문한다

보기의 왼쪽 아래 모서리에서 번호를 감소까지 오른쪽 숫자는 증가

당신이 왼쪽 아래보다 큰 디지털 번호를 찾을하려는 경우 따라서, 왼쪽 하단 코너에서 찾고 시작합니다. 오른쪽;

디지털 시간의 왼쪽 하단 모서리보다 숫자를 찾을 때, 위로 이동

왼쪽 하단의 오른쪽 상단에서 차례로 비교

//212ms 
public static boolean Find3(int target, int [][] array){
        int i=array.length-1; //定义最后一行下标
        int j =0;//左下角
         while(i>=0 && j<array[0].length) {//

             if (array[i][j] > target) {//左下角数字比待比较 数字 大上移
                 i--;
             } else if (array[i][j] < target) {//左下角数字比当前数字小,右移
                 j++;
             } else {
                 return true;
             }

         }

         return false;
    }

폭력 알고리즘 : O (N * N) 210ms

인라인 이진 검색 : O (NLOGN) 193ms

오른쪽 아래 - 왼쪽 : 212ms

게시 된 101 개 원래 기사 · 원 찬양 17 ·은 10000 +를 볼

추천

출처blog.csdn.net/ZHOUJIAN_TANK/article/details/104002824