【go】剑指offer04_二维数组中的查找

32 篇文章 0 订阅

题目描述

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

 

示例:

现有矩阵 matrix 如下:

[
  [1,   4,  7, 11, 15],
  [2,   5,  8, 12, 19],
  [3,   6,  9, 16, 22],
  [10, 13, 14, 17, 24],
  [18, 21, 23, 26, 30]
]
给定 target = 5,返回 true。

给定 target = 20,返回 false。

 

限制:

0 <= n <= 1000

0 <= m <= 1000

 我的解题思路一:dfs,深度遍历,奈何时间超时,的确这样处理比较慢

func findNumberIn2DArray(matrix [][]int, target int) bool {
    if len(matrix)==0{
		return false
	}
	var wideNum = len(matrix)-1
	var longNum = len(matrix[0])-1
	var IsTarget = false
	var dfs func(matrix [][]int, target,wide,long int)
	dfs = func(matrix [][]int, target,wide,long  int) {
		if wide>wideNum || long>longNum{
			return
		}
		if matrix[wide][long] == target{
			IsTarget = true
			return
		}
		if matrix[wide][long]<target{
			dfs(matrix,target,wide+1,long)
			dfs(matrix,target,wide,long+1)
		}
	}
	dfs(matrix,target,0,0)
	return IsTarget
}

解题思路二:暴力遍历

func findNumberIn2DArray(matrix [][]int, target int) bool {
	if len(matrix)==0{
		return false
	}
	var wideNum = len(matrix)-1
	var longNum = len(matrix[0])-1
	var IsTarget = false
	for i:=0;i<=wideNum;i++{
		for j:=0;j<=longNum;j++{
			if matrix[i][j]==target{
				IsTarget = true
			}
		}
	}
	return IsTarget
}

解题思路三:遍历优化,利用有序递增规律,从左下角开始遍历,比目标数大则纵左边减一,比目标数小则横坐标加一

func findNumberIn2DArray(matrix [][]int, target int) bool {
	if len(matrix)==0{
		return false
	}
	var wideNum = len(matrix)-1
	var longNum = len(matrix[0])-1
	var IsTarget = false
	var row = wideNum
	var column = 0
	for row>=0 && column<=longNum{
		if matrix[row][column]==target{
			IsTarget = true
            break
		}else if matrix[row][column]>target{
			row--
		}else if matrix[row][column]<target{
			column++
		}
	}
	return IsTarget
}

解题思路四:未实现,在上一步的基础上加上二分法,每次横纵坐标对半减少

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值