1 '''
2 1.买卖股票的最佳时机给定一个数组,它的第?i?个元素是一支给定股票第?i?天的价格。
3 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
4 注意你不能在买入股票前卖出股票。(5分)
5 要求:
6 1.输入: [7,1,5,3,6,4]
7 2.输出: 5
8 3.解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
9 4.注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。
10 '''
11 class Solution:
12 def maxProfit(self, prices):
13
14 max_profit1 = 0
15 if len(prices) <= 1:
16 return max_profit1
17
18 min_profit = prices[0]
19 max_profit2 = 0
20 for index in range(len(prices)):
21 if prices[index] <= min_profit:
22 min_profit = prices[index]
23 elif prices[index] - min_profit > max_profit2:
24 max_profit2 = prices[index] - min_profit
25 return max_profit2
26
27 '''
28 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
29 Input: [0,1,0,3,12]
30 Output: [1,3,12,0,0]
31 '''
32 class Solution1:
33 def moveZeroes(self, nums):
34 i = j = 0
35 for i in range(len(nums)):
36 if nums[i] != 0:
37 nums[j] , nums[i]= nums[i] , nums[j]
38 j += 1
39
40
41 '''
42 抓了a,b,c,d四名犯罪嫌疑人,其中有一人是小偷,审讯中:
43 ?a说 我不是小偷;
44 ?b说 c是小偷;
45 ?c说 小偷肯定是d;
46 ?d说 c胡说!
47 其中有三个人说的是实话,一个人说的是假话,请编程推断谁是小偷(用穷举法和逻辑表达式)
48 '''
49
50 for i in range(4):
51 i += 1
52 if 3 == ((i != 1) + (i == 3) + (i == 4) + (i != 4)):
53 # 利用ascii码表输出
54 str = chr(96 + i) + "是小偷!"
55 print(str)
56 请手写插入查找算法,并且用注释写出思路,并且指出时间复杂度
57
58
59 def charu(nums,order = 1):
60 #第一个数不动,从第二个数开始比较
61 for i in range(1,len(nums)):
62 j=i-1
63 tmp = nums[i] #记录本次待比较的词语
64 while j >= 0:
65 if tmp < nums[j]:
66 nums[j+1] = nums[j]
67 nums[j] = tmp
68 j = j-1
69 else:
70 break
71 if order == 1:
72 return nums
73 else:
74 return nums[::-1]
75
76
77
78 有1、2、3、4、5、6、7、8、9、10个数字,能组成多少个互不相同且无重复数字的五位数?都是多少?
79
80 a = [1,2,3,4,5,6,7,8,9,10]
81 def test2(a):
82 i = 0
83 for a in range(1, 5):
84 for b in range(1, 5):
85 for c in range(1, 5):
86 if a != b != c:
87 A = (a * 100 + b * 10 + c)
88 i += 1
89 print(A)
90 print("一共有" + str(i) + "种排列")
91
92
93 2. 二分查找
94
95 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 # 整除2
100 6. if data_set[mid] == val: # 如果等于要查找的值,返回下标
101 7. return mid
102 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]{10}'
108 r'[\w]+@[\w]+\.[\w]{2,3}'