劍指offer 二分法

2021-10-24 04:02:27 字數 4063 閱讀 6164

二分

#11.py

# 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 [3,4,5,1,2] 為 [1,2,3,4,5] 的乙個旋轉,該陣列的最小值為1。  

class

solution

:def

minarray

(self, numbers: list[

int])-

>

int:

left=

0 right=

len(numbers)-1

while leftmid=

(left+right)//2

if numbers[mid]

>numbers[right]

: left=mid+

1elif numbers[mid]

: right=mid

else

:right-=

1return numbers[left]

#16.py

# 實現函式double power(double base, int exponent),求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題。

# 示例 1:

# 輸入: 2.00000, 10

# 輸出: 1024.00000

# 示例 2:

# 輸入: 2.10000, 3

# 輸出: 9.26100

# 示例 3:

# 輸入: 2.00000, -2

# 輸出: 0.25000

# 解釋: 2-2 = 1/22 = 1/4 = 0.25

class

solution

:def

mypow

(self, x:

float

, n:

int)

->

float

:if n==0:

return

1elif n<0:

return

1.0/self.mypow(x,

-n)elif n%2==

0:return self.mypow(x*x,n//2)

else

:return self.mypow(x*x,n//2)

*x

#4.py

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

# 示例:

# 現有矩陣 matrix 如下:

# [# [1, 4, 7, 11, 15],

# [2, 5, 8, 12, 19],

# [3, 6, 9, 16, 22],

# [10, 13, 14, 17, 24],

# [18, 21, 23, 26, 30]

# ]# 給定 target = 5,返回 true。

# 給定 target = 20,返回 false。

class

solution

:def

findnumberin2darray

(self, matrix: list[list[

int]

], target:

int)

->

bool:if

len(matrix)==0

:return

false

i=0 j=

len(matrix[0]

)-1while i<

len(matrix)

and j>=0:

if matrix[i]

[j]i+=

1elif matrix[i]

[j]>target:

j-=1else

:return

true

return

false

#47.py

```python3

# 在乙個 m*n 的棋盤的每一格都放有乙個禮物,每個禮物都有一定的價值(價值大於 0)。你可以從棋盤的左上角開始拿格仔裡的禮物,並每次向右或者向下移動一格、直到到達棋盤的右下角。給定乙個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮物?

# 示例 1:

# 輸入:

# [# [1,3,1],

# [1,5,1],

# [4,2,1]

# ]# 輸出: 12

# 解釋: 路徑 1→3→5→2→1 可以拿到最多價值的禮物

class

solution

:def

maxvalue

(self, grid: list[list[

int]])

->

int:

m=len(grid)

n=len(grid[0]

) dp=[[

0]*n for _ in

range

(m)]

dp[0]

[0]=grid[0]

[0]for i in

range(1

,n):

dp[0]

[i]=dp[0]

[i-1

]+grid[0]

[i]for i in

range(1

,m):

dp[i][0

]=dp[i-1]

[0]+grid[i][0

]for i in

range(1

,len

(grid)):

for j in

range(1

,len

(grid[0]

)): dp[i]

[j]=

max(dp[i-1]

[j],dp[i]

[j-1])

+grid[i]

[j]return dp[-1

][-1

]

#53.py

# 統計乙個數字在排序陣列**現的次數。

# # 示例 1:

# 輸入: nums = [5,7,7,8,8,10], target = 8

# 輸出: 2

# 示例 2:

# 輸入: nums = [5,7,7,8,8,10], target = 6

# 輸出: 0

class

solution

:def

search

(self, nums: list[

int]

, target:

int)

->

int:

# l,r=0,len(nums)-1

# while l# mid=(l+r)//2

# if nums[mid]>target:

# r=mid

# elif nums[mid]# l=mid+1

# res1=l

# l,r=0,len(nums)-1

# while l# mid=(l+r)//2

# if nums[mid]>target:

# r=mid

# elif nums[mid]# l=mid+1

# res2=l

# return res2-res1+1

import bisect

left=bisect.bisect_left(nums,target)

right=bisect.bisect(nums,target)

return right-left

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

二分法,二分搜尋

二分法是乙個應用很廣泛的演算法 好吧,剛說出這句話的時候,我查了一下資料,發現我了解的應用寥寥無幾.ok,既然不知道,那就下次補充把。咱們直接進入主題。二分法 bisection method 是一種方程式根的近似值求法。演算法 若要求已知函式f x 0的值則 1.先找出乙個區間 a,b 使得f a...