searching in 2d array as O(n) with unsorted rows

后端 未结 3 1613
暖寄归人
暖寄归人 2021-01-19 11:54

I need to write a method that takes 2d array \'int [][] m\' and a value \'val\' and check if val is in the array in the complexity of O(n) while n defined as the num

3条回答
  •  没有蜡笔的小新
    2021-01-19 12:17

    your solution is here. i made a function that do binary search for first column. if the val find in the first column the function return true, else last period of 'l' and 'r' are benefit for us. 'r' and 'l' are always equal of have only one distance(r=l or abs(r-l)=1 ). lower bound of 'r' and 'l' are expected row that the val maybe exist in it. so we should search this row.
    O(n) for binary search is Log(n) and for row search is n. so the final O(n) will be n.code is here:

    static boolean binarySearch(int arr[][], int l, int r, int x)
    {
        if (r>=l)
        {
            int mid = l + (r - l)/2;
    
            // If the element is present at the 
            // middle itself
            if (arr[mid][0] == x)
               return true;
    
            // If element is smaller than mid, then 
            // it can only be present in left subarray
            if (arr[mid][0] > x)
               return binarySearch(arr, l, mid-1, x);
    
            // Else the element can only be present
            // in right subarray
            return binarySearch(arr, mid+1, r, x);
        }
    
        // We reach here when element is not present
        //  in array
    
        int row = Math.min(l,r);
        for(int i=0; i

提交回复
热议问题