Java 有序二维数组查找

xiaoxiao2021-02-28  39

1.    数组每行每列都是有序的,可对每行进行二分查找:

public class MyArray {

/** * 递归实现二分查找 * @param arr * @param start * @param end * @param num * @return */ public static int Binsearch(int arr[],int start,int end,int num){int mid=(end-start)/2+start; if(num==arr[mid]){ return mid; } if(start>=end) { return -1; }else if(num<arr[mid]){ return Binsearch(arr,start,mid-1,num); } if(num>arr[mid]){ return Binsearch(arr,mid+1,end,num); } return -1; } public static boolean find(int [][]array,int target){if(array.length==0){ return false; } for(int k=0;k<array.length;k++){ int[] arr=array[k]; if(arr.length==0){ return false; } int temp=Binsearch(arr,0,arr.length-1,target); if(temp!=-1){ return true; } } return false; } public static void main(String [] args){ int [][]arr1={};//空数组 int [][]arr2=null;//空数组 int [][]arr3=new int[0][0];//长度为0的数组 }

}

注意:空数组和null的区别 测试用例是nul时,如果不加红色判断语句,则会有错误Exception in thread "main" java.lang.NullPointerException,因为对空指针数组引用进行使用,而长度为0的数组就算不加红色部分的判断,for语句也可以判断长度,和对arr3可以进行引用。

 

2.    数组每行每列都是有序的,那么对于左下角的数来说列是递减的,行是递增的

public class MyArray2 { public static boolean find(int arr[][],int key){ for(int i=arr.length-1;i>=0;i--){ //System.out.println(i); for(int j=0;j<arr[i].length;j++){ //System.out.println(j); if(arr[i][j]>key){ break; } if(arr[i][j]==key){ return true; } } } return false; } public static void main(String args[]){ int arr[][]={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}}; System.out.print(find(arr,16)); } }

 

 

转载请注明原文地址: https://www.6miu.com/read-2631695.html

最新回复(0)