NOTE

二维数组中的查找

记录《剑指 Offer》“二维数组中的查找”的原始解题笔记。

Data Structures & Algorithms创建于 更新于 约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

2. 思路

  • 暴力法:遍历每个元素判断是否相等
  • 从右上往左下找

3. 实现

3.1. 暴力法

// 暴力求解 
// 时间:O(mn)
// 空间:O(1)
func Find(target int, array [][]int) bool {
	for _, row := range array {
		for _, col := range row {
			if col == target {
				return true
			}
		}
	}

	return false
}

3.2. 从右上往左下找

// 从右上角往左下角找
// 1,2,8,9
// 2,4,9,12
// 4,7,10,13
// 6,8,11,15
// 时间:O(m+n)
// 空间:O(1)
func Find2(target int, array [][]int) bool {
	if len(array) == 0 || len(array[0]) == 0 {
		return false
	}

	rowBound := len(array) - 1
	colBound := len(array[0]) - 1

	row := 0
	col := colBound
	for row <= rowBound && col >= 0 {
		if array[row][col] == target {
			return true
		} else if array[row][col] < target {
			row++
		} else {
			col--
		}

	}

	return false
}

4. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看