劍指offer 面試題3

2021-08-28 10:36:28 字數 3662 閱讀 7010

思路:從左下角或者右上角開始比較

簡單版本:

"""

查詢方式從右上角開始查詢

如果當前元素大於target, 左移一位繼續查詢

如果當前元素小於target, 下移一位繼續查詢

進行了簡單的修改, 可以判定輸入型別為字元的情況

""""""

查詢方式從左下角開始查詢

如果當前元素大於target, 上移一位繼續查詢

如果當前元素小於target, 右移一位繼續查詢

進行了簡單的修改, 可以判定輸入型別為字元的情況

"""# 簡單版本

def find_integer(matrix, num):

""":param matrix:

:param num: int

:return: bool

"""if not matrix:

return false

rows, columns = len(matrix), len(matrix[0])

row, column = rows - 1, 0

while row >= 0 and column <= columns - 1:

if matrix[row][column] == num:

return true

elif matrix[row][column] > num:

row -= 1

else:

column += 1

return false

matrix = [[1, 2, 8, 9],

[2, 4, 9, 12],

[4, 7, 10, 13],

[6, 8, 11, 15]]

matrix2 =

print(find_integer(matrix,9))

print(find_integer(matrix2,9))

複雜版本:

"""

查詢方式從右上角開始查詢

如果當前元素大於target, 左移一位繼續查詢

如果當前元素小於target, 下移一位繼續查詢

進行了簡單的修改, 可以判定輸入型別為字元的情況

""""""

查詢方式從左下角開始查詢

如果當前元素大於target, 上移一位繼續查詢

如果當前元素小於target, 右移一位繼續查詢

進行了簡單的修改, 可以判定輸入型別為字元的情況

""""""

如果出現了array中既有字串,又有數字,可能需要用到ord()函式,這裡就不展開討論了

"""class solution:

# array 二維列表

def find(self, array, target):

# 判斷陣列是否為空

if array == :

return false

raws = len(array)

columns = len(array[0])

# rawnum = len(array)

# colnum = len(array[0])

# 判斷非法輸入

# 可以換成 isinstance(target, (int, float)) 進行判斷

if type(target) == float and type(array[0][0]) == int:

if int(target) == target:

return false

target = int(target)

elif type(target) == int and type(array[0][0]) == float:

target = float(target)

elif type(target) != type(array[0][0]): # 浮點數的相等判斷問題需要特別注意, 一般都是判斷兩個數的差值是否小於乙個特別小的數。這裡不展開分析。

return false

column = columns - 1

raw = 0

# i = colnum - 1

# j = 0

while column >= 0 and raw < raws:

if array[raw][column] < target:

raw += 1

elif array[raw][column] > target:

column -= 1

else:

return true

return false

# 擴充套件, 輸出陣列中target的個數

def searchmatrix(self, matrix, target):

if matrix == none or len(matrix) == 0:

return 0

rows = len(matrix)

cols = len(matrix[0])

row, col = 0, cols - 1

count = 0

while row <= rows - 1 and col >= 0:

if matrix[row][col] > target:

col -= 1

elif matrix[row][col] < target:

row += 1

else:

count += 1

col -= 1

return count

array = [[1, 2, 8, 9],

[2, 4, 9, 12],

[4, 7, 10, 13],

[6, 8, 11, 15]]

array2 =

array3 = [['a', 'b', 'c'],

['b', 'c', 'd']]

array4 = [[62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80],

[63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],

[64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82],

[65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83],

[66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],

[67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85]]

findtarget = solution()

print(findtarget.find(array, 10))

print(findtarget.find(array, 30))

print(findtarget.find(array, 13.0))

print(findtarget.find(array, ''))

print(findtarget.find(array2, 10))

print(findtarget.find(array3, 'b'))

劍指offer面試題3

前言 從最近的比賽中,真的可以看出來自己做題目太少了,一些常見的演算法,思路都不怎麼會,接下來要好好努力了 分析 書中給的分析思路很好,要解決乙個複雜的問題,最有效的方法就是從乙個具體的問題入手,這道題就可以舉例子,查詢7這個元素,首先從右上角開始,9比7大,所以9所在的列不會有,查詢8,比7大,所...

劍指offer面試題7

面試題7 用兩個棧實現佇列 using namespace std template class cqueue 預備知識 佇列 佇列也是一種常見的資料結構 特點是先進先出 fifo 在stl中有stack和queue兩個容器 template class stack 成員函式 empty size ...

劍指offer面試題11

面試題1 數值的整數的次方 題目 實現函式double power double base,int exponent 求base的 exponent次方。不得使用庫函式,同時不需要考慮大數問題。思路 首先應該明確指數的可能取值 正整數,0,負整數 另外還需要考慮底數是0的情形。對於負整指數,我們可以...