1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| package main
import ( "fmt" )
func searchMatrix(matrix [][]int, target int) bool { if len(matrix) == 0 || len(matrix[0]) == 0 { return false }
m, n := len(matrix), len(matrix[0]) left, right := 0, m*n - 1
for left <= right { mid := (left + right) / 2 row, col := mid / n, mid % n
if matrix[row][col] == target { return true } else if matrix[row][col] < target { left = mid + 1 } else { right = mid - 1 } }
return false }
func main() { testCases := []struct { matrix [][]int target int expected bool }{ { matrix: [][]int{{1, 3, 5, 7}, {10, 11, 16, 20}, {23, 30, 34, 60}}, target: 3, expected: true, }, { matrix: [][]int{{1, 3, 5, 7}, {10, 11, 16, 20}, {23, 30, 34, 60}}, target: 13, expected: false, }, }
for i, tc := range testCases { result := searchMatrix(tc.matrix, tc.target) fmt.Printf("Test Case %d, Input: matrix = %v, target = %d\n", i+1, tc.matrix, tc.target) if result == tc.expected { fmt.Printf("Test Case %d, Output: %v, PASS\n", i+1, result) } else { fmt.Printf("Test Case %d, Output: %v, FAIL (Expected: %v)\n", i+1, result, tc.expected) } } }
|