02 尋找排列矩陣目標數字(劍指Offer)

2021-10-05 14:51:52 字數 1018 閱讀 6398

題目:在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

規律:首先選取陣列中右上角的數字。如果該數字等於要查詢的數字,查詢過程結束;如果該數字大於要查詢的數字,剔除這個數字所在的列;如果該數字小於要查詢的數字,剔除這個數字所在的行。也就是說如果要查詢的數字不在陣列的右上角,則每一次都在陣列的查詢範圍中剔除一行或者一列,這樣每一步都可以縮小查詢的範圍,直到找到要查詢的數字,或者查詢範圍為空。

**

/**

* @author 江湖人稱白玉湯

* @program 劍指offer

* @description 尋找二維陣列中是否包含某值,每行的值遞增,每列的值也遞增

* @create 2020-04-29 16:45

**/public

class

findarraysnum,,

,};int target =0;

system.out.

println

(findnumfromarrays

(matrix, target));

}/**

* rows為總行數,columns為總列數,

* 從右上角判斷,若大於目標數字,則--column,若小於目標數字,則++row,

* 直到找到或row=rows-1,columns為0

* @param matrix

* @param target

* @return result:boolean

*/public

static

boolean

findnumfromarrays

(int

matrix,

int target)

return

false;}

}

陣列中出現次數超過一半的數字 劍指offer

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。需要找的數字超過陣列長度的一半,那麼如果對它進行排序,再取數姐中間那個數字即為所求,但是這種做法的時間複雜度最少為o nlogn...

陣列中出現次數超過一半的數字 劍指offer

這個解法參考了劍指offer,利用快排的partition函式思想,超過一半的數字肯定是陣列的中位數,也就是下標為n 2的數字,我們每次隨機找乙個下標,然後逐步接近n 2.還要注意vector的傳參問題,partition是需要對vector進行排序的,所以要傳入引用,並且用 algorithm 中...

陣列中出現次數超過一半的數字(劍指offer)

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。解法1 遍歷加入到hashmap中,再遍歷一遍進行判斷即可 解法2 乙個數超過一半則他比其他所有數個數的和都大,那麼我們就可以標記...