Leetcode 74: 2 차원 행렬 검색 (가장 자세 한 해법!!)
9177 단어 Problemsleetcode 문제 풀이 안내
예시 1:
:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
: true
예시 2:
:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
: false
문제 풀이 의 사고 방향.
이 문 제 는 매우 간단 하 다. 먼저 생각 하 는 가장 간단 한 사 고 는 바로 왼쪽 에서 오른쪽으로 위 에서 아래로 행렬 을 옮 겨 다 니 는 것 이다.
class Solution:
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
if not matrix:
return False
r, c = len(matrix), len(matrix[0])
for i in range(r):
for j in range(c):
if matrix[i][j] == target:
return True
return False
그러나 이것 은 분명히 가장 좋 은 방법 이 아니다. 문 제 를 찾 는 데 있어 서 우 리 는 사실 모두 2 분 의 검색 을 통 해 해결 할 수 있 는 지 생각해 볼 수 있다.
class Solution:
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
if not matrix:
return False
r, c = len(matrix), len(matrix[0])
left, right = 0, r*c
while left < right:
mid = (left+right)//2
m, n = mid//c, mid%c
if matrix[m][n] == target:
return True
elif matrix[m][n] < target:
left = mid + 1
else:
right = mid
return False
이 문 제 는 우리 가
python
의 bisect
가방 을 사용 하면 매우 pythonic
코드 를 쓸 수 있다.import bisect
class Solution:
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
i = bisect.bisect(matrix, [target])
if i < len(matrix) and matrix[i][0] == target:
return True
row = matrix[i-1]
j = bisect.bisect_left(row, target)
return j < len(row) and row[j] == target
reference:
https://leetcode.com/problems/search-a-2d-matrix/discuss/26248/6-12-lines-O(log(m)-+-log(n))-myself+library
나 는 이 문제 의 다른 언어 버 전 을 GitHub Leetcode 에 추가 했다.
문제 가 있 으 면 지적 해 주세요!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Leetcode 199: 두 갈래 나무의 오른쪽 보기(초상세 해법!!!)두 갈래 나무를 정해서 오른쪽에 서 있는 것을 상상하고 꼭대기에서 끝까지 순서대로 오른쪽에서 볼 수 있는 노드 값을 되돌려줍니다. 예: 문제 풀이 사고방식 이 문제는 사실 Leetcode 102: 두 갈래 나무의 차...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.