python 面試演算法題

2022-05-25 03:39:06 字數 3455 閱讀 7088

1

'''2

1.買賣**的最佳時機給定乙個陣列,它的第?i?個元素是一支給定**第?i?天的**。

3如果你最多隻允許完成一筆交易(即**和賣出一支**),設計乙個演算法來計算你所能獲取的最大利潤。

4注意你不能在****前賣出**。(5分)

5要求:

61.輸入: [7,1,5,3,6,4]

72.輸出: 5

83.解釋: 在第 2 天(**** = 1)的時候**,在第 5 天(**** = 6)的時候賣出,最大利潤 = 6-1 = 5 。

94.注意利潤不能是 7-1 = 6, 因為賣出**需要大於****。

10'''

11class

solution:

12def

maxprofit(self, prices):

1314 max_profit1 =0

15if len(prices) <= 1:

16return

max_profit1

1718 min_profit =prices[0]

19 max_profit2 =0

20for index in

range(len(prices)):

21if prices[index] <=min_profit:

22 min_profit =prices[index]

23elif prices[index] - min_profit >max_profit2:

24 max_profit2 = prices[index] -min_profit

25return

max_profit2

2627

'''28

給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。

29input: [0,1,0,3,12]

30output: [1,3,12,0,0]

31'''

32class

solution1:

33def

movezeroes(self, nums):

34 i = j =0

35for i in

range(len(nums)):

36if nums[i] !=0:

37 nums[j] , nums[i]=nums[i] , nums[j]

38 j += 1

3940

41'''

42抓了a,b,c,d四名犯罪嫌疑人,其中有一人是小偷,審訊中:

43?a說 我不是小偷;

44?b說 c是小偷;

45?c說 小偷肯定是d;

46?d說 c胡說!

47其中有三個人說的是實話,乙個人說的是假話,請程式設計推斷誰是小偷(用窮舉法和邏輯表示式)

48'''

4950

for i in range(4):

51 i += 1

52if 3 == ((i != 1) + (i == 3) + (i == 4) + (i != 4)):53#

利用ascii碼表輸出

54 str = chr(96 + i) + "

是小偷!"55

print

(str)

56請手寫插入查詢演算法,並且用注釋寫出思路,並且指出時間複雜度

5758

59def charu(nums,order = 1):60#

第乙個數不動,從第二個數開始比較

61for i in range(1,len(nums)):

62 j=i-1

63 tmp = nums[i] #

記錄本次待比較的詞語

64while j >=0:

65if tmp

66 nums[j+1] =nums[j]

67 nums[j] =tmp

68 j = j-1

69else:70

break

71if order == 1:

72return

nums

73else:74

return nums[::-1]

7576

7778 有1、2、3、4、5、6、7、8、9、10個數字,能組成多少個互不相同且無重複數字的五位數?都是多少?

7980 a = [1,2,3,4,5,6,7,8,9,10]

81def

test2(a):

82 i =0

83for a in range(1, 5):

84for b in range(1, 5):

85for c in range(1, 5):

86if a != b !=c:

87 a = (a * 100 + b * 10 +c)

88 i += 1

89print

(a)90

print("

一共有" + str(i) + "

種排列")91

9293 2. 二分查詢

9495 1.def

bin_search(data_set,val):

96 2. low =0

97 3. high = len(data_set)-1

98 4. while low <=high:

99 5. mid = (low+high)//2 #

整除2100 6. if data_set[mid] == val: #

如果等於要查詢的值,返回下標

101 7. return

mid102 8. elif data_set[mid] < val: #

如果列表中間的值小於需要的值

103 9. low = mid + 1 #

則把最小的下標改成mid+1

104 10. else: #

如果列表中間的值大於需要的值

105 11. high = mid - 1 #

則把最大的下標改成mid-1

106 12. return

#如果沒找到return空

107 zhengze_phone=r'

1[\d]

'108 r'

[\w]+@[\w]+\.[\w]

'

**.py

面試演算法題

前幾天,一好友去筆試,有一題 現在有1000個蘋果,和10個箱子,如何把這1000個蘋果裝在這10個箱子裡,才能使不管任何數量 1 1000 的蘋果,都能一次給出?當時,我們都想,出題這人。今天,在想移位的時候,突然想到了,這絕對是二進位制數的變種。分析 1000個蘋果,最接近1024,轉化為2進製...

面試演算法題

1 直方圖矩形最大值 class solution s.push i return res 2 第n個醜數 class solution return res.back 3 lru cache 最近最少使用頁面置換快取器 class lrucache int get int key void set...

某個面試演算法題

援引某人部落格 有乙個整數n,寫乙個函式f n 返回0到n之間出現的 1 的個數。比如f 13 6,現在f 1 1,問下乙個最大的f n n的n是什麼?writed by chszs public void fn int inputval 1000000 int cntforone 0 long c...