矩阵二维数组上下翻转的Java代码怎_剑指Offer 面试题04. 二维数组中的查找(Java代码)...

前往LeetCode做题

题目描述

数组从左至右递增,从上至下递增。

请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

输入输出用例

[

[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。

题解

/*

------------>

|

|

|

|

v

数组如图,左上角是最小的,右下角是最大的。

从这两个点出发的话,需要进行判断:

- 一左上角为例,它的右边和下标都是大于自己的,

- 如果目标元素大于自己,那么自己是不好办的了

换个方面想,如果从右上角或者左下角,会怎么样呢?

- 如果目标元素大于当前所在元素值

- 该元素左边的值都是小于它的,所以它左边全部都不要考虑了

- 该元素下标的值都是大于它的,所以它可以放心往下走

- 如果目标元素小于当前所在元素值,与上面的分析相反

- 左边都是小于它的,放心往左边走

- 下边都是大于它的,不能走了

*/

测试用例

/*

测试用例:

合理的输入:

数组中有该元素

数组中没有该元素

不合理的输入:

矩阵为空

特殊输入:

矩阵只有一行

矩阵只有一列

*/

代码:

class Solution {

public boolean findNumberIn2DArray(int[][] matrix, int target) {

if(matrix.length == 0 || matrix[0].length == 0) return false;

int rows = matrix.length; // 行数

int columns = matrix[0].length; // 列数

// 从右上角开始

int row = 0, col = columns-1;

// 循环的条件得选好

while(row < rows && col >= 0){

// 如果目标元素大于当前元素,左边不走了,下边可以走

if(target > matrix[row][col]){

row++;

}

// target小于当前元素,下标不可以走了

else if(target < matrix[row][col]){

col--;

}

// target等于当前元素,返回 true

else{

return true;

}

}

return false;

}

}

注意点:

while语句中的 if 条件判断语句,不能写成三个 if 条件判断语句 。

因为这样会发生数组越界。

// 会发生数组越界

if(target > matrix[row][col]){

row++;

}

if(target < matrix[row][col]){

col--;

}

if(target == matrix[row][col]){

return true;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值