剑指offer【01】- 二维数组中的查找(Java)
在经历了春招各大公司的笔试题和面试官的血虐之后,决定要刷一些算法题了,不然连面试机会都没有。
而应对笔试和面试,比较出名的就是剑指offer的题目和LeetCode的题目了。剑指offer应对面试中的手撕代码,leetcode主要应对线上笔试。本文的剑指offer题目是在牛客网做的,一共有66题,我是按默认的顺序往下做的。牛客网直达链接:https://www.nowcoder.com/activity/oj
题目:二维数组中的查找
考点:数组
描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:从左下角元素往上查找,右边元素是比这个元素大,上边是的元素比这个元素小。于是,target比这个元素小就往上找,比这个元素大就往右找。如果出了边界,则说明二维数组中不存在target元素。
java版本
1 public class Solution { 2 public boolean Find(int target, int [][] array) { 3 //获取二维数组的行数 4 int row = array.length; 5 //获取二维数组的列数 6 int col = array[0].length; 7 int j = 0; 8 while(row > 0 && j < col){ 9 //从数组的左下角开始判断 10 if(target > array[row-1][j]){ 11 //往右移 12 j++; 13 }else if(target < array[row-1][j]){ 14 //往上移 15 row--; 16 }else{ 17 return true; 18 } 19 } 20 return false; 21 } 22 }
刚开始不懂怎么下手,看了一下别人的解题思路,理解题目后还是能写出来了。