劍指Offer精選程式設計面試題4 二維陣列中的查詢

2021-10-01 06:35:06 字數 2747 閱讀 2627

2)思路

3)小結

4)**

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

樣例

注意題目說的陣列,無論是列還是行,都是遞增的,所有這個矩陣,是個有序矩陣,則可以根據這個矩陣的特點進行查詢。矩陣的角,是有特點的,左上角是最小點,右下角是最大點,但是這兩個角不能用,沒有辦法判斷刪除某行某列,只能是另外兩個,只需要從矩陣的乙個角左下角或者右上角,必須是元素最大和最小的組合,(右上角),如果目標值大於當前元素,則刪除當前元素所在的這一列,若小於當前元素,則刪除當前元素所在的這一行。這樣操作,都在目標元素的比較範圍中,不會丟失比較元素。結束判斷,通過移動位置,如果移動越界,則不存在。

學習程式設計書上的**規範,測試用例的簡潔明瞭

參考劍指offer源**-github

//標頭檔案

#pragma once

#include

#include

#include

bool

find

(int

* matrix,

int rows,

int columns,

int number)

else

if(matrix[row * columns + column]

> number)

-- column;

else

++ row;}}

return found;

}// ********************主函式及測試**********************

void

test

(char

* testname,

int* matrix,

int rows,

int columns,

int number,

bool expected)

// 1 2 8 9

// 2 4 9 12

// 4 7 10 13

// 6 8 11 15

// 要查詢的數在陣列中

void

test1()

,,,}

;test

("test1",(

int*

)matrix,4,

4,7,

true);

}// 1 2 8 9

// 2 4 9 12

// 4 7 10 13

// 6 8 11 15

// 要查詢的數不在陣列中

void

test2()

,,,}

;test

("test2",(

int*

)matrix,4,

4,5,

false);

}// 1 2 8 9

// 2 4 9 12

// 4 7 10 13

// 6 8 11 15

// 要查詢的數是陣列中最小的數字

void

test3()

,,,}

;test

("test3",(

int*

)matrix,4,

4,1,

true);

}// 1 2 8 9

// 2 4 9 12

// 4 7 10 13

// 6 8 11 15

// 要查詢的數是陣列中最大的數字

void

test4()

,,,}

;test

("test4",(

int*

)matrix,4,

4,15,

true);

}// 1 2 8 9

// 2 4 9 12

// 4 7 10 13

// 6 8 11 15

// 要查詢的數比陣列中最小的數字還小

void

test5()

,,,}

;test

("test5",(

int*

)matrix,4,

4,0,

false);

}// 1 2 8 9

// 2 4 9 12

// 4 7 10 13

// 6 8 11 15

// 要查詢的數比陣列中最大的數字還大

void

test6()

,,,}

;test

("test6",(

int*

)matrix,4,

4,16,

false);

}// 魯棒性測試,輸入空指標

void

test7()

intmain

(int argc,

char

* ar**)

劍指Offer精選程式設計面試題14 剪繩子

2 思路 3 補充知識 4 與測試 要求 給你一根長度為n的繩子,請把繩子剪成m段 m,n都是整數,n 1 並且m 1 每段繩子的長度記為k 0 k 1 k m 請問k 0 x k 1 x x k m 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的...

劍指Offer精選程式設計面試題15 二進位制中1的個數

2 思路 3 與測試 要求 輸入乙個整數,輸出該數二進位制表示中1的個數。如輸入9,則輸出2。總體來分三種 思路一弊端 此操作輸入負數的時候容易引發死迴圈,因為負數移位的時候最高位會設為1,容易陷入死迴圈。思路二弊端 此操作的迴圈次數為整數二進位制的位數,為常規解法。思路三優勢 此操作的迴圈次數為整...

劍指offer 面試題4

替換空格 本題的解決方法還有乙個限制,即在當前字串上進行替換操作,不能申請額外記憶體。所以,前提該字串陣列的總長度要比替換後的長度大,不然替換失敗。include using namespace std void replaceblank char str,int length int indexo...