首页 > 其他分享 >【剑指Offer学习】【面试题3 :二维数组中的查找】

【剑指Offer学习】【面试题3 :二维数组中的查找】

时间:2022-11-13 22:23:23浏览次数:53  
标签:面试题 matrix Offer int length 查找 数组 currCol

思路:

规律从右上角开始,或左下开始。
不能从左上角开始找,这样每次比较后向右和向下都是越来越大。

public class P03_FindMaxInMatrix {
    /*
    规律从右上角开始:    
    如果该数字小于目标,向下row ++;
    如果该数字大于目标,向左col --;
    直到要找到的数字,或者查找范围已为空。
    * @param matrix 待查找数组
    * @param number 要查找的数
    * @return 查找结果, true为找到,false没找到。
    *
    *
     */
    public static boolean find(int[][] matrix, int number) {
        //输入的条件判断。
        if (matrix == null || matrix.length < 1 || matrix[0].length < 1) {
            return false;
        }
        //要查找的在数组之内
        int totalCol = matrix[0].length;
        int totalRow = matrix.length;

        int currCol = matrix[0].length - 1;
        int currRow = 0;
        while (currCol >= 0 && currCol <= totalCol - 1 && currRow >= 0 && currRow <= totalRow-1) {
            if (matrix[currRow][currCol] == number) {
                return true;
            } else if (matrix[currRow][currCol] < number) {
                currRow++;
            } else {
                currCol--;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        int[][] matrix = {
                {1, 2, 8, 9},
                {2, 4, 9, 12},
                {4, 7, 10, 13},
                {6, 8, 11, 15}
        };
//测试用例
        System.out.println(find(matrix,7));
        System.out.println(find(matrix,5));
        System.out.println(find(matrix,1));
        System.out.println(find(matrix,15));
        System.out.println(find(matrix,16));
        System.out.println(find(matrix,-1));
        System.out.println(find(null,-1));
    }
}


标签:面试题,matrix,Offer,int,length,查找,数组,currCol
From: https://www.cnblogs.com/tangdatou/p/16887181.html

相关文章

  • 拿下阿里自动化测试岗23k*14薪offer的全程面试记录解析以及总结
    一、自我介绍面试官您好!我叫xx,来自深圳,毕业之后一直从事于软件测试的工作,有做过保险、金融、电商等项目;有做过做功能测试、接口测试,自动化测试,在工作中积极主动、可以独立的......
  • 剑指 Offer 41. 数据流中的中位数 - 力扣(Leetcode)
    剑指Offer41.数据流中的中位数-力扣(Leetcode)分析维护两个堆,一个大根堆,一个小根堆。插入操作:当进行插入时,先判断大根堆中是否有元素,如果没有直接插入大根堆,若有......
  • 二分查找
    二分查找法实际上是不断地将有序数据进行对半分割,并检查每个分区的中间元素。再重复根据中间数确定目标范围并递归实行对半分割,直到中间数等于待查找的值或是目标数不在......
  • 剑指 Offer 59 - I. 滑动窗口的最大值 - 力扣(Leetcode)
    剑指Offer59-I.滑动窗口的最大值-力扣(Leetcode)一.分析方法一:数组长度为1e5,k的大小为1e4,因此直接暴力计算会TLE。我们可以思考一个更复杂的问题:询问任意区间中的......
  • 3-Vue高频面试题
    1.你怎样理解VueVue通过MVVM思想实现数据的双向绑定,数据驱动页面视图。Vue不是一个MVVM框架,它是一个视图层框架。Vue是数据驱动的框架,我们不必纠结于DOM元素的获取......
  • I++与++I 面试题
    程序员面试宝典第28页,书中的答案是9,49而正确的答案应该是,12,423*4=126*7=421#include<stdio.h>2#defineproduct(x)((x)*(x))3intmain(intargc,char......
  • 发现了二分查找的秘密
    **二分查找(BinarySearch)**算法,也叫折半查找算法。1.1、原理分析二分查找是一种非常简单易懂的快速查找算法,其思想在生活中随处可见,比如朋友聚会的时候爱玩的一个猜数游......
  • 肖sir___公司 菜鸟网络面试___面试题
    ==================================7.26号 1.Java里面的stringbuffer和stringbuilder的区别是什么?==》StringBuffer和StringBuilder都是可变的字符串,也就是说,在对字......
  • 肖sir___面试公司总结__吉利面试题
    2022.9.27号吉利测试面试题1.开机自启动2.Java开机自启动3.用了哪些linux版本4.tomcat搭建测试环境5.后台开发框架有哪些6.除了python和Java还会哪些语言?7.给你一个测试......
  • 数组的复制、排序,查找
    一、数组的复制int[]re=Arrays.copyOf(nums,len)一、数组的排序,不用返回值接收,默认升序Arrays.sort(nums)二、数组查找参考:https://blog.csdn.net/weixin_386267......