Find a number in sorted multidimentional array with binary search

后端 未结 10 978
深忆病人
深忆病人 2021-01-14 02:12

we got an increasing sorted multidimensional array for example:

int[][] mat = {{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}};

How can

10条回答
  •  陌清茗
    陌清茗 (楼主)
    2021-01-14 02:44

    Use java.util.Arrays. Use Arrays.binarySearch() function on flattened matrix:

    int[][] mat = {{1,2,3,4},
    {5,6,7,8},
    {9,10,11,12},
    {13,14,15,16}};
    
    
    int key = 3;
    int[] oneDArray = new int[mat[0].length*mat[0].length];
    
    int s = 0;
    for(int i = 0; i < mat[0].length; i ++) 
        for(int j = 0; j < mat[0].length; j ++){                           
            oneDArray[s] = mat[i][j];
            s++;
        } 
    
    
    int found = Arrays.binarySearch(oneDArray, key);
    if(found > -1){
         System.out.println(found/ mat[0].length + "," + found % mat[0].length);    
    }
    

    And the demo: https://ideone.com/bFZVMs

提交回复
热议问题