面试题04. 二维数组中的查找

image.png
1以行为单位,判断当前当前行首和尾部元素是不在在tagert范围内
2 如果在范围内执行二分查找

  1. package main
  2. import "fmt"
  3. func findNumberIn2DArray(matrix [][]int, target int) bool {
  4. for i := 0; i < len(matrix); i++ {
  5. l :=len(matrix[i])
  6. if l>0 &&matrix[i][0] <= target && target <= matrix[i][l-1] {
  7. ok := BinarySearch(matrix[i], target)
  8. if ok {
  9. return true
  10. }
  11. }
  12. }
  13. return false
  14. }
  15. func BinarySearch(a []int, target int) bool {
  16. l := 0
  17. r := len(a) - 1
  18. for l <= r {
  19. mid := l + (r-l)>>1
  20. if a[mid] == target {
  21. return true
  22. } else if a[mid] > target {
  23. r = mid - 1
  24. } else {
  25. l = mid + 1
  26. }
  27. }
  28. return false
  29. }
  30. //面试题04. 二维数组中的查找
  31. func main() {
  32. fmt.Println(findNumberIn2DArray(
  33. [][]int{{1, 4, 7, 11, 15},
  34. {2, 5, 8, 12, 19},
  35. {3, 6, 9, 16, 22},
  36. {10, 13, 14, 17, 24},
  37. {18, 21, 23, 26, 30}}, 20))
  38. fmt.Println(findNumberIn2DArray(
  39. [][]int{{}}, 1))
  40. }

image.png