博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二维数组中的查找
阅读量:4350 次
发布时间:2019-06-07

本文共 1395 字,大约阅读时间需要 4 分钟。

二维数组中的查找

题目描述

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

解题思路

首先是仔细阅读题目,提取关键词:有序、二维数组

解法一

1.分析

遍历所有,然后比较,返回状态

2.代码

public class Solution {    public boolean Find(int target, int [][] array) {        for(int i=0;i

3.复杂度

时间复杂度:$ O\left(n^{2}\right) $

空间复杂度:\(O(1)\)

4.问题

没有考虑到有序这个明显特征,所以复杂度偏高

解法二

1.分析

利用该二维数组的性质:

  • 每一行都按照从左到右递增的顺序排序,
  • 每一列都按照从上到下递增的顺序排序

改变个说法,即对于左下角的值 m,m 是该行最小的数,是该列最大的数

每次将 m 和目标值 target 比较:

  • 当 m < target,由于 m 已经是该行最大的元素,想要更大只有从列考虑,取值右移一位
  • 当 m > target,由于 m 已经是该列最小的元素,想要更小只有从行考虑,取值上移一位
  • 当 m = target,找到该值,返回 true

用某行最小或某列最大与 target 比较,每次可剔除一整行或一整列

2.代码

public class Solution {    public boolean Find(int target, int [][] array) {        int rows=array.length;        int columns=array[0].length;        if(rows==0 || columns==0){            return false;        }        int j=rows-1;        int k=0;        for(int i=0;i
=columns){ return false; } }else if(array[j][k]>target){ j--; if(j<0){ return false; } }else{ return true; } } return false; }}

3.复杂度

时间复杂度:$ O\left(m+n\right) $

空间复杂度:\(O(1)\)

总结

1.二维数组的length代表意义:

对于数组a[3][4]

  • a.length:3
  • a[0].length:4

    2.需要考虑极端情况:

  • 二维数组为空
  • j、k的值是否会超出合理范围

参考:牛客网

转载于:https://www.cnblogs.com/BluthLeee/p/11399161.html

你可能感兴趣的文章
154. Find Minimum in Rotated Sorted Array II
查看>>
腾讯QQ会员技术团队:以手机QQ会员H5加速为例,为你揭开sonic技术内幕
查看>>
七个对我最重要的职业建议(译文)
查看>>
数据库连接池
查看>>
Angular(一)
查看>>
python 基本内容
查看>>
三次握手以及四次挥手
查看>>
leetcode-1 Two Sum 找到数组中两数字和为指定和
查看>>
Learning To Rank之LambdaMART前世今生
查看>>
使用JS意识到自己主动提交表单
查看>>
关于埃博拉(Ebola)基础研究病毒
查看>>
用JSP实现的商城购物车模块
查看>>
json
查看>>
南阳理工 499 迷宫
查看>>
在uefi引导的win8系统上装Ubuntu双系统
查看>>
Python中生成一个没有重复元素的随机序列??
查看>>
C++ 名字空间namespace的使用
查看>>
【转】C#中的两把双刃剑:抽象类和接口
查看>>
function,new function,Function,new Function 之间的区别
查看>>
Python作业题(列表,元组)
查看>>