題目描述
在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
思想
①因為有序,所以二分查詢。
②從上到下,從左到右,都是遞增。但是把二維變成一維之後就不是遞增的了
②行進行二分查詢,確定在哪一行,再在行上確定是哪一列。
本來以為用非遞迴思想可以解決問題,但是會出現分叉,只能用遞迴。
情況一:在行上二分,若mid大於要查詢的值,則在前半部分查詢即可(當前行和下面的都大於該值)。
情況二:在行上二分,若mid小於要查詢的值,有三種情況,可以在上面,可以在當前行,可以在下面。(比如上圖,查詢數字3,因此這也是為什麼不能使用非遞迴的原因了),上面下面進行遞迴,當前行進行二次二分,確定具體位置,二次二分時可以先進行判斷減少不必要操作。
**
int findx(int target, vector> array,int low1,int high1,int x,int y,int flag)
int mid1=(low1+high1)/2;
if(array[mid1][0]==target) else if(array[mid1][0]>target)else
if(array[mid1][mid2]>target)else
}}//查詢失敗,上下遞迴
return findx(target,array,low1,mid1-1,x,y,flag)||findx(target,array,mid1+1,high1,x,y,flag);
}return false;
}bool find(int target, vector> array)
int y=array[0].size();
if(y==0)
int low1=0;
int high1=x-1;
return findx(target,array,low1,high1,x,y,0);
}
二維陣列中的查詢(陣列 查詢)
題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路一 從左下角來看矩陣,向上數字遞減,向右數字遞增 從左下角開始查詢,當要查詢數字比左下角數字大時,右移 要查詢數字比左下...
二維陣列中的查詢 陣列
在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。獲得二維陣列的行和列 區分好行和列,和下標的關係 我從右上角開始,下標為 0 列 1 如果目標數大於這個數字,...
陣列 二維陣列中的查詢
題目 在乙個 n m 的二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。示例 現有矩陣 matrix 如下 1,4,7,11,15 2,5,8,12,19 3,6,9,16,22 10,1...