• 题目1:二维数组中的查找


    题目:一个二维数组中,每一行按照从左到右递增的顺序排列,每一列按照从上到下递增的顺序排列。

    要求:完成一个函数,输入这样的数组和一个整数,判断数组中是否含有该整数。存在,返回 true,不存在返回 false。

    题目链接

    思路

    一维递增数组中可以使用二分查找,每次都能将查找范围减小一半,题目中是二维数组,如果将每一行与每一列合并视为一个一维数组,则该数组为递增排列,使用二分查找,每次查找将范围减少一行或者一列,迭代之后,可以得到查找结果。

    以下图所示数组为例,查找22,需要经过四次查找,前两次分别将查找范围减少一行,第三次减少一列,第四次时,查找到22,结束。

    Java 实现

    public class Solution {
    	public boolean Find(int [][] array,int target) {
    		if (array == null || array.length == 0 || array[0].length == 0)
                return false;
            
            int rows = array.length;
            int cols = array[0].length;
            
            int i = 0, j = cols - 1;
            while (i <= rows - 1 && j >= 0) {
                int tmp = array[i][j];	// 从左下角开始查找
                if (target == tmp) {
                    return true;
                } else if (target > tmp) {
                    i++;	// 删除 tmp 所在列
                } else {
                    j--;	// 删除 tmp 所在行
                }
            }
            
            return false;
    	}
    }
  • 相关阅读:
    Protocol Buffer使用
    uImage、zImage、bzImage、vlinzx区别
    nginx学习之一
    Android屏幕底部弹出DialogFragment(3)
    C++11 | 正则表达式(4)
    Android绘图之渐隐动画
    Android动态Java代码调整window大小
    Spring Boot交流平台
    Java日志实战及解析
    Android WindowManager悬浮窗:不需要申请权限实现悬浮
  • 原文地址:https://www.cnblogs.com/satansk/p/5552375.html
Copyright © 2020-2023  润新知