js算法--搜索二维矩阵 II和计算右侧小于当前元素的个数

搜索二维矩阵 II

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:

每行的元素从左到右升序排列。 每列的元素从上到下升序排列。

实例

现有矩阵 matrix 如下: 
[ 3
	[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。

方案1

暴力法
思路

题目只需找出二维数组中是否包含目标值,因此直接用两个 for 循环遍历二维矩阵的所有元素,找到目标元素则返回 true,遍历完仍未找到则返回 false。

详解
  1. 第一层 for 循环取到二维数组中所有的一维数组
  2. 第二层 for 循环中用两个索引值取到二维数组中每一个具体的值
  3. 将取到的每一个值和目标值作比较,若相同则返回 true
  4. 若直到所有循环结束还未找到与目标值相同的值则返回 false
function getTarget(arr, target) {
    for(let i = 0; i < arr.length; i++){
        for(let j = 0; j < arr[i].length; j++){
            if(arr[i][j] == target){
                return true
            }
        }
    }
    return false;
}

方案二

思路

由于矩阵的行和列是排序的,从左到右递增,从上到下递增,所以对任意元素和目标值比较大小时,总可以去找相对较小(往左往上)或相对较大(往右往下)的值继续比较,直到找到目标值或找不到。

详解
  1. 直接取二维数组中左下角的值和目标值比较
  2. 若该值比目标值大,则向上查找(第一个索引减 1),若该值比目标值小,则向右查找(第二个索引加 1)
  3. 重复该操作,当查询值等于目标值时则返回 true
  4. 若直到查询值离开二维数组时还未找到目标值则返回 false
function getTarget(matrix, target) { 
    let j = matrix.length - 1; 
    let i = 0; 
    while (j >= 0 && i < matrix[0].length) { 
        if (matrix[j][i] > target) { 
            j--; 
        } else if (matrix[j][i] < target) { 
            i++; 
        } else {
            return true; 
        } 
    } 
    return false; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值