728x90
문제
https://leetcode.com/problems/search-a-2d-matrix/submissions/
내 풀이
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int row = matrix.length-1;
for(int i=0; i<matrix.length-1; i++) {
if (matrix[i][0] <= target && matrix[i+1][0] > target) {
row = i;
break;
}
}
int[] targetRow = new int[matrix[0].length];
for(int i=0; i<matrix[0].length; i++) {
targetRow[i] = matrix[row][i];
}
return bin_search(target, targetRow);
}
private boolean bin_search(int target,int[] row) {
int left = 0;
int right = row.length - 1;
while(left<=right) {
int mid = left + (right-left) / 2;
if (row[mid] == target) {
return true;
}
if (row[mid] > target) {
right = mid - 1;
}
else if (row[mid] < target) {
left = mid + 1;
}
}
return false;
}
}
알게 된 것
binary_search 가 익숙해졌다. 외워졌다.
binary_search 는 타겟보다 낮고 많은 숫자의 갯수 구하기로도 사용할 수 있다. (이것 미만이 몇개, 이것 이상이 몇개 등)
정렬된 2d array 에서 특정 값을 빨리 찾기 위해서는 row 를 먼저 찾는방법이 나는 먼저 떠오를 것 같다.
피드백
변수명이 그지같다.
2d array 의 length 를 구하는 법이 헷갈릴 필요가 없는데 헷갈렸다. (matrix[0].length, matrix.length)
'프로그래밍 > leetcode' 카테고리의 다른 글
[leetcode] Top K Frequent Elements (0) | 2022.04.09 |
---|---|
[leetcode] 81. Search in Rotated Sorted Array II (0) | 2022.03.28 |
[leetcode] Two City Scheduling (0) | 2022.03.25 |
[leetcode] Smallest String With A Given Numeric Value (0) | 2022.03.22 |
[leetcode] 1007. Minimum Domino Rotations For Equal Row (0) | 2022.03.21 |