金融算法
冒泡排序
def bubble_sort(nums):
# 判断外出循环的次数
index = len(nums) - 1
while index:
print(index)
# 第一个数字,和后面每一个数字进行对比,找出最大值,放到最后!!
for i in range(index):
if nums[i] > nums[i+1]:
nums[i], nums[i+1] = nums[i+1], nums[i]
index -= 1
if __name__ == "__main__":
nums = [3, 6, 8, 5, 2, 4, 9, 1, 7]
bubble_sort(nums)
print('result:', nums)
快速排序
def quick_sort(nums, start, end):
i = start
j = end
key = nums[i] # 主要是用一个格子,用于数据交换
if i >= j:
return
# 第一次循环,把左右两边分开
while i < j:
while i < j and key <= nums[j]:
j -= 1
nums[i] = nums[j]
while i < j and key >= nums[i]:
i += 1
nums[j] = nums[i]
nums[i] = key
# 左边进行内部循环
quick_sort(nums, start, i-1)
# 右边进行内部循环
quick_sort(nums, i+1, end)
if __name__ == "__main__":
nums = [3, 6, 8, 5, 2, 4, 9, 1, 7]
quick_sort(nums, 0, len(nums)-1)
print('result:', nums)
动态规划
股票的低买高卖,只能先买后卖,求最大利润
输入: [7,1,5,3,6,4]
输出: 5 -> 1买,6卖,利润最大!
输入: [7,6,4,3,1]
输出: 0 -> 没有买点!
解题方案 - 思路1
找到一个最低价格的位置,记录 index 找到一个最大卖出价格的位置,记录 利润
def maxProfit(prices):
n = len(prices)
if n == 0: return 0
result = 0
minprice = prices[0]
for i in range(1, n):
minprice = min(prices[i], minprice)
result = max(prices[i] - minprice, result)
return result
解题方案 - 思路2
初始化 dp,用于存放目录结果 找到最小值,计算当前最大的利润,存放到 dp中 找到 dp 以后一个元素,就是当前结果的最大值
def maxProfit(prices):
n = len(prices)
if n == 0: return 0
dp = [0] * n
minprice = prices[0]
for i in range(1, n):
# 找到最小的值
minprice = min(minprice, prices[i])
dp[i] = max(dp[i - 1], prices[i] - minprice)
return dp[-1]