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}'