劍指offer之二維遞增陣列查詢指定元素

2021-08-16 21:20:07 字數 881 閱讀 8125

這個題時間複雜度最低的做法當然是找到規律。因為橫向元素都是遞增,縱向元素也都是遞增。

所以我們應該找到一種方法,防止我們的遍歷分叉

1、常規錯誤思路:

從左上角第乙個元素開始遍歷,遍歷到第乙個大於目標元素的位置。目標元素在當前位置左下方。然後此時我們會選擇向下遍歷,遍歷到第乙個大於當前元素的位置。那麼此時目標元素既可能存在於當前位置的左上方部分以及左下方部分。也就是分叉了,這個位置就相當於不起作用了。只篩除了當前豎行。接下來我們並不能緊接著選擇乙個位置,繼續遍歷。

2、正規思路:

最簡單的思路就是,無非就是按行進行二分查詢。但是一般可能會卡時間。因為很明顯這道理給的規律,你只用了一半,即橫向有序,和題意不是很符合。(注意二分的時候,high=mid和low=mid這樣寫的話,會導致效率下降,可能會超時。牛客就是這樣。)

public class solution else if(array[i][mid]3、最好思路

按照題目給的規律,找到乙個遍歷的方向。比如想辦法把橫,縱座標遍歷的方向都固定在乙個方向,防止分叉。比如從右上方,或者左下方開始遍歷。

從右上方開始遍歷的話。比當前位置大的元素都在下方,比當前位置小的元素都在左方。當前位置比目標元素大,我們就往左移,比目標元素大,我們就往下移。左下方的原理類似。

public class solution else if(target < array[col][row])else

}return false;

}}

public class solution else if(target < array[col][row])else

}return false;

}}

劍指offer 二維陣列

題目 在乙個二維陣列中每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。完成乙個函式,輸入這樣的陣列和乙個整數,判斷陣列中是否含有該整數。思路 由於該二維陣列從左到右,從上到下均為順序遞增的。因此右下角與左上角的數字均大於或小於其周圍數字,如果選擇改組作為起始點,則無法確定下一...

劍指offer之二維陣列中的查詢

題目 在乙個二維陣列中,每一行都按照從左到右的遞增順序排序,每一列都按照從上到下的遞增順序排序。完成乙個函式,輸入這樣乙個二維陣列和乙個整數,判斷陣列中是否有該整數。1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 演算法 首先選取陣列中右上角的數字,如果該數字等於要查詢的數...

劍指offer之二維陣列中的查詢

之前寫過一些劍指offer的題目,但是遇到vector的時候都會跳過因為並不清楚vector容器到底是個什麼,前幾天在對vector進行簡單的了解之後,理解不是很深刻,但是可以使用vector來做題了。題目 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從...