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...