二分查詢 Search a 2D Matrix

2021-07-15 10:18:30 字數 481 閱讀 3426

題目:

給定了乙個矩陣,該矩陣不僅每行,每列都遞增,而且每行的首位比前行的末位數字大時,可看成一位陣列,利用二分查詢。

例如矩陣為:

int data=,,};

二維矩陣與一維矩陣下標對應的關係:

下標為i和j的元素,data[i][j],為矩陣中的第i*cols+j(下標從0開始)個元素。

那麼,若 i*cols+j == values 反求i和j的話, i=values/cols , j=values%cols。

public boolean serchmatrix(int data,int target)

if(data[left/cols][left%cols] == target)//!

return true;

if(data[right/cols][right%cols] == target)

return true;

else //data[right]

二分查詢 2

v1中使用while迴圈的方式,我們也可以不使用迴圈,使用遞迴的方式來實現 public static intbinarysearch v2 int array,int value public static intmysearch int array,int start,int end,int v...

2 二分查詢(上)

二分模板有兩個,分別適用於不同的情況。演算法思路 假設目標值在閉區間 l,r 中,每次將區間長度縮小一半,當l r時,我們就找到了目標值。版本一 當我們將區間 l,r 劃分成 l,mid 和 mid 1,r 時,其更新操作時l mid 1或者 r mid 計算mid時不需要加1。版本二 當我們將區間...

2 二分查詢(下)

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1 你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。輸入...