在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
二維陣列為array,整數字target
一開始我想的是先從行判斷,當target>array[i]並且target所以只需要滿足target>array[i]即可,然後通過for迴圈遍歷
public class solution {
public boolean find(int target, int array) {
//判定特殊情況
if(array.length==0)return false;
if(array[0].length==0)return false;
/for(int i=0;i第乙個數,就進入迴圈
if(target>array[i][0]){
for(int j=1;j相對於第一種,增加了在單行中查詢的技巧——二分查詢,注意二分查詢要用while迴圈,保證不斷二分,而且low<=high
時間是154ms,快了一些
public class solution {
public boolean find(int target, int array) {
int r=array.length;
int l=array[0].length;
if(r==0||l==0)return false;
for(int i=0;i=array[i][0]){
//low與high作為下標,必須在陣列的bound裡面,否則會陣列越界
int low=0;
int high=l-1;
//這裡要小於等於,因為可能存在一開始兩者就相同的情況
while(low<=high){
int mid=(low+high)/2;
if(target>array[i][mid])low=mid+1;
else if(target考慮充分利用條件
左上為最小,右下為最大
左下為行最大,列最小,右上為行最小,列最大
所以找到左下或右上這種屬性相反的情況
然後讓target進行判定,比如找左下**,如果target大,列就加,taget小,行就減**
把大小和行列分別對應起來,就簡單多了
public class solution {
public boolean find(int target, int array) {
int r=array.length;
int l=array[0].length;
if(r==0||l==0)return false;
//初始情況,找左下方的點
int i=r-1;
int j=0;
// 防止陣列越界
while(i>=0&&jarray[i][j])j++;
else if(target時間為152ms
二維陣列中的查詢(三)
題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。樣例輸入陣列 1,2,8,9 2,4,9,12 4,7,10,13 6,8,11,15 如果輸入查詢數值為7,則返回true,如...
二維陣列中的查詢問題
在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。測試用例 7,1,2,8,9 2,4,9,12 4,7,10,13 6,8,11,15 對應輸出應該為 true 思路 首先我們選擇從...
js二維陣列定義和初始化的三種方法
方法一 直接定義並且初始化,這種遇到數量少的情況可以用 var thearray 0 1 0 2 1 1 1 2 2 1 2 2 方法二 未知長度的二維陣列 var tarray new array 先宣告一維 for var k 0 k 給定義的陣列傳入所需的值 tarray 6 1 5 這樣就可...