您的位置:首页 > 其它

查找有序二维数组中的元素

2017-04-10 15:52 176 查看

给定一个已排序的二维数组array,在其中查找一个元素value

查找策略如下图:

(1)将value和数组的右上角的值比较,如果大于右上角的值,则移除数组的第一行。

(2)将value和数组的左下角的值比较,如果大于左下角的值,则移除数组的第一列。

(3)直到查找完毕,已经找不到符合(1)(2)的情况后,或者数组只剩下一个元素

(4)得到一个较小的二维数组,再遍历该数组即可。

 

           

 

/**
* Created by wuchao on 17-3-29.
*/
import javax.swing.text.html.HTMLDocument;
import java.util.*;
public class test {
public static int arr[][] = {{1,2,3,4},{5,6,7,8},{9,10,12,13},{14,15,16,17}};
public static void main(String[] args) {

System.out.println(find(arr,1));
}
public static boolean find(int[][] array,int value){
if(array==null) return false;
int m = array.length;//行
int n = array[0].length;//列
int[] right = {0,n-1};//右上角
int[] left = {m-1,0};//左下角
while(true){
if(right[0]==left[0]&&right[1]==left[1]){
if(array[right[0]][right[1]]==value){
return true;
}else{
return false;
}
}
if(array[right[0]][right[1]]<value){
right[0]=right[0]+1;
}else if(array[left[0]][left[1]]<value){
left[1]=left[1]+1;
}else{
//跳法这里说明已经找完
break;
}
}
for(int i=right[0];i<=left[0];i++){
for(int j=left[1];j<=right[1];j++){
if(array[i][j]==value) return true;
}
}
return false;
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: