python:面试算法题

  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}'
代码.py

你可能感兴趣的:(python:面试算法题)