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

Posted 且听风吟-wuchao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找有序二维数组中的元素相关的知识,希望对你有一定的参考价值。

给定一个已排序的二维数组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;
    }
}

 

以上是关于查找有序二维数组中的元素的主要内容,如果未能解决你的问题,请参考以下文章

经典面试算法题:线性查找有序二维数组

有序二维数组中的查找

有序二维数组中的查找

二维数组3:搜索二维矩阵

剑指offer:二维数组中的查找

二维数组中的查找