74. 搜索二维矩阵

题目

  1. 搜索二维矩阵
    给你一个满足下述两条属性的 m x n 整数矩阵:

    每行中的整数从左到右按非严格递增顺序排列。
    每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

示例 1:
在这里插入图片描述

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

示例 2:
在这里插入图片描述

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false

解题思路

查找问题,因排好序了,可以使用二分查找解决。

  • 建立一个列表存储矩阵每行最后一个元素(最大值)。
  • 通过比较target值和列表存储值对应到应在第几行查找。
  • 在对应行中进行二分查找。
def find_line_index(matrix, target):
	line_index = 0
	n = len(matrix)
	for line in matrix:
		max_value = line[-1]
		if target > max_value:
			line_index += 1
	if line_index > n-1:
            return None
        else:
            return line_index

def binary_search(nums, target):
	left, right = 0, len(nums)-1
	while left <= right:
		mid = ms(left + right) // 2
		if nums[mid] == target:
			return True
		elif nums[mid] < target:
			left = mid + 1
		else:
			right = mid - 1
	else:
		return False

def searchMatrix(matrix, target):
	if not matrix and not matrix[0]:
		return False
	line_index = find_line_index(matrix, target)
	if line_index is not None:
            if_find = binary_search(matrix[line_index], target)
            return if_find
        else:
            return False

matrix =  [[1,3,5,7],[10,11,16,20],[23,30,34,60]]
target = 13
print(searchMatrix(matrix, target))
  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值