劍指offer(演算法和資料操作篇)

2021-08-10 14:40:02 字數 2888 閱讀 8101

class

solution:

defminnumberinrotatearray

(self, rotatearray):

if len(rotatearray) == 0:

return

0 front = 0

rear = len(rotatearray) - 1

minval = rotatearray[0]

if rotatearray[front] < rotatearray[rear]:

return rotatearray[front]

else:

while (rear - front) > 1:

mid = (rear + front)//2

if rotatearray[mid] > rotatearray[rear]:

front = mid

elif rotatearray[mid] < rotatearray[front]:

rear = mid

elif rotatearray[mid] == rotatearray[front] and rotatearray[front] == rotatearray[rear]:

for i in range(1, len(rotatearray)):

if rotatearray[i] < minval:

minval = rotatearray[i]

rear = i

minval = rotatearray[rear]

return minval

test = solution()

print(test.minnumberinrotatearray([3, 4, 5, 1, 2]))

print(test.minnumberinrotatearray([1, 2, 3, 4, 5]))

print(test.minnumberinrotatearray([1, 1, 1, 0, 1]))

print(test.minnumberinrotatearray([1, 0, 1, 1, 1]))

print(test.minnumberinrotatearray())

print(test.minnumberinrotatearray([1]))

#如何不使用遞迴實現斐波那契數列

class

solution:

deffibonacci

(self, n):

temparray = [0, 1]

if n >= 2:

for i in range(2, n+1):

temparray[i%2] = temparray[0] + temparray[1]

return temparray[n%2]

# 青蛙跳台階, 每次可以跳1級或2級

defjumpfloor

(self, number):

# write code here

temparray = [1, 2]

if number >= 3:

for i in range(3, number + 1):

temparray[(i + 1) % 2] = temparray[0] + temparray[1]

return temparray[(number + 1) % 2]

# 青蛙跳台階,每次可以跳1/2/3/...n-1個台階

defjumpfloorii

(self, number):

ans = 1

if number >= 2:

for i in range(number-1):

ans = ans * 2

return ans

'''

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。

'''class

solution:

defnumberof1

(self, n):

count = 0

if n < 0:

n = n & 0xffffffff

while n:

count += 1

n = (n-1)&n

return count

defnumberof2

(self, n):

if n < 0:

s = bin(n & 0xffffffff)

else:

s = bin(n)

return s.count('1')

# 判斷乙個數是不是2得整數次冪

defpowerof2

(self, n):

if n&(n-1) == 0:

return

true

else:

return

false

# 判斷兩個數的二進位制表示有多少位不一樣, 直接比較兩個數的二進位制異或就可以

defandor

(self, m, n):

diff = m^n

count = 0

while diff:

count += 1

diff = diff&(diff-1)

return count

s = solution()

print(s.numberof1(-1))

print(s.numberof2(-1))

print(s.powerof2(64))

print(s.powerof2(63))

print(s.andor(10, 13))

劍指offer面試題彙總 演算法和資料操作

面試題11 旋轉陣列最小數字 面試題12 矩陣中的路徑 面試題13 機械人的運動範圍 解題思路 面試題14 剪繩子 面試題15 二進位制中1的個數 求斐波那契數列的第n項。long long fibonacci unsigned int n long long fibonacci unsigned ...

劍指offer 演算法和資料結構 查詢和排序

和資料結構一樣,演算法的面試題也備受面試官的青睞,其中排序和查詢是面試是考察演算法的重點。在準備面試的時候應該重點掌握二分查詢 歸併排序和快速排序,做到能隨時正確 完整地寫出它們的 查詢和排序都是在程式設計中常用到的演算法。查詢相對而言較為簡單,不外乎順序查詢 二分查詢 雜湊表查詢和二叉排序樹查詢。...

leetcode演算法題 劍指Offer篇(1)

1.1 題目描述 在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。1.2 題解 1.2.1 利用map結構public intfindrepeatnumber i...