当前位置: 首页 > 后端技术 > Java

牛客网高频算法题系列-BM18-Search

时间:2023-04-02 01:09:45 Java

inaTwo-dimensionalArray维数相同的数组),每一行从左到右升序排列,每一列从左到右升序排列从上到下。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否包含整数。参见原题:二维数组中查找解法一:二分查找法由于原始二维数组是严格有序的,即从左到右递增,从上到下递增,所以可以采用二分查找的方式进行处理.具体处理流程如下:首先,处理特殊场景。当数组为空时,找不到目标值,直接返回false。否则,从二维数组的右上角位置开始,作为二等分的中点,x和y分别为二维数组的坐标位置,然后循环直到找到目标值:搜索结束的条件是到x和y之一超出二维数组的边界;如果当前位置的值与目标值相同,则表示找到目标值,返回true;如果当前位置的值大于目标值,则向左移动,因为左边的数较小,然后进行下一轮查找;如果当前位置的值小于目标值,则向下移动,因为下面的数字更大,然后进行下一轮搜索。最后,如果搜索完成但未找到目标值,则返回false。代码publicclassBm018{/***二分查找法**@paramtarget目标值*@paramarray二维数组*@return*/publicstaticbooleanfind(inttarget,int[][]array){//首先处理特殊场景,当数组为空时,无法找到目标值,直接返回falseif(array==null||array.length==0||array[0].length==0){返回假;}//然后从二维数组右上角的位置开始,作为二等分的中点,x和y分别是二维数组的坐标位置intx=0,y=array[0].长度-1;//搜索终止的条件是x和y其中之一超出了二维数组的边界while(x=0){if(array[x][y]==target){//如果当前位置的值与目标值相同,说明已经找到目标值,returntruereturntrue;}elseif(array[x][y]>target){//如果当前位置的值大于目标值,则向左移动,因为左边的数较小,则进行下一个搜索轮y--;}elseif(array[x][y]