seungriyou / algorithm-study

알고리즘 & SQL 문제 풀이 기록
https://leetcode.com/u/summer_y
0 stars 0 forks source link

[LC] 1901. Find a Peak Element II #108

Open seungriyou opened 3 months ago

seungriyou commented 3 months ago

<1901. Find a Peak Element II> (#98)

Approach

2D array이므로 binary search를 하나의 원소가 아닌 하나의 column (또는 row) 에 대해서 수행하면 된다. (난 column 기준으로)

따라서 이전 문제와 동일한 아이디어(#107)를 활용하되, 2D array이므로 상하/좌우를 나누어서 살펴본다.

현재 살펴보고 있는 mid_col에 대해서,


Idea 1: lo <= hi

ref: https://leetcode.com/problems/find-a-peak-element-ii/solutions/1276556/java-python-c-clear-explanation-with-images-m-log-n-very-short-code

이전 문제와 마찬가지로 peak를 찾았을 때 곧바로 반환하기 위해서는 <= 조건이 더 직관적이다.

row, col = len(mat), len(mat[0])

lo_col, hi_col = 0, col - 1

while lo_col <= hi_col:
    mid_col = (lo_col + hi_col) // 2
    ...


Idea 2: lo < hi

ref: https://leetcode.com/problems/find-a-peak-element-ii/solutions/1275904/java-clean-code-with-explanation-o-nlgm

이전 문제와 마찬가지로, lo < hi 로직으로 더 간결한 로직을 작성할 수도 있다.


Complexity