Jianzhi offer04: 정렬된 2차원 배열에서 숫자 찾기


1. 주제 설명

여기에 이미지 설명 삽입

2. 문제 해결 아이디어 및 코드 구현

1. 문제 해결 아이디어

방법 1:
폭력 순회, 가지치기 작업을 할 수 있습니다. 순회 횟수가 목표보다 많으면 직접 중단하십시오.

방법 2:
이진 검색, 각 줄에 대한 이진 검색 수행, 파이썬에는 내장 함수 bisect가 있어 매우 편리합니다.

방법 3:
오른쪽 상단 모서리에서 왼쪽 하단 방향으로 검색 대상보다 크면 왼쪽으로 한 비트 이동 목표보다 작으면 아래로 한 비트 이동 이 검색 방법은 정렬된 경우에 적용할 수 있습니다
. 시작하려면 흐르는 물처럼 왼쪽 하단 모서리에서 시작하여 대상보다 약간 큰 방향으로 천천히 흐르도록 할 수도 있습니다.

2. 코드 구현

방법 3 코드는 다음과 같습니다(예제).

class Solution:
    def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
        # 从矩阵右上角开始,如果大于,就往左走,如果小于,就往下走
        n, m = len(matrix), len(matrix) and len(matrix[0])
        i, j = 0, m
        while i<n and j:
            if matrix[i][j-1]==target:
                return True
            elif matrix[i][j-1] > target:
                j-=1
            else:
                i+=1
        return False

추천

출처blog.csdn.net/weixin_45271005/article/details/131718018