劍指offer 具體演算法類 搜尋演算法

2021-10-05 01:49:37 字數 1778 閱讀 4349

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

方法一:選取右上角為起始點,遍歷

def

find

(self, target, array)

:# write code here

row =

0 col =

len(array[0]

)-1while col >=

0and row <=

len(array)-1

:if array[row]

[col]

> target:

col -=

1elif array[row]

[col]

< target:

row +=

1else

:return

true

return

false

方法二:選取右上角為起始點,帥氣遍歷

def

searchmatrix

(self, matrix, target)

: j =-1

for row in matrix:

while j +

len(row)

and row[j]

> target:

j -=

1if row[j]

== target:

return

true

return

false

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。

輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。

例如陣列為的乙個旋轉,該陣列的最小值為1。

note:給出的所有元素都大於0,若陣列大小為0,請返回0。

方法一:暴力搜尋

# -*- coding:utf-8 -*-

class

solution

:def

minnumberinrotatearray

(self, rotatearray)

:# write code here

ifnot rotatearray:

return

0else

:for i in

range

(len

(rotatearray)-1

):if rotatearray[i]

< rotatearray[0]

:return rotatearray[i]

方法二:二分查詢

l, r =0,

len(nums)-1

if nums[l]

< nums[r]

:return nums[l]

while l <= r:

mid =

(l+r)//2

if nums[mid]

> nums[l]

: l = mid

elif nums[mid]

< nums[r]

: r = mid

else

:return nums[r]

劍指offer 具體分類

面試題3 陣列中重複的數字 面試題4 二維陣列中的查詢 面試題11.旋轉陣列的最小數字 面試題21 調整陣列順序使得奇數字於偶數前面 面試題39 陣列中出現超過一半的數字 面試題40 最小的k個數 面試題42 連續子陣列的最大和 面試題45 把陣列排成最小的數 面試題51 陣列中的逆序對 面試題53...

劍指offer 遍歷搜尋

1.廣度優先思想 適合題目 給定初始狀態跟目標狀態,要求從初始狀態到目標狀態的最短路徑。輔助資料結構是佇列。1.1 prime最小生成樹 1.2 dijkstra單源最短路徑演算法 1.3 樹的分層遍歷,二叉樹的最小深度 1.4 走迷宮,從起點到終點的最短路徑 定義乙個二維陣列 int maze 5...

演算法 劍指offer

思路 若百位上數字為0,百位上可能出現1的次數由更高位決定 若百位上數字為1,百位上可能出現1的次數不僅受更高位影響還受低位影響 若百位上數字大於1,則百位上出現1的情況僅由更高位決定。舉例 個位1出現的次數 round 1 1 每次迴圈1出現一次,0 9迴圈了53次,第54次迴圈為0 4 十位1出...