跳转至

金融算法

冒泡排序

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]


回到顶部