首页 > 试题广场 >

比特币最佳买卖时机

[编程题]比特币最佳买卖时机
  • 热度指数:10778 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定一个正整数数组,它的第 i 个元素是比特币第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一次),设计一个算法来计算你所能获取的最大利润。

注意你不能在买入比特币前卖出。


输入描述:
正整数数组,为以空格分隔的n个正整数


输出描述:
最大利润
示例1

输入

7 1 5 3 6 4

输出

5
s = list(map(int, input().split()))
c = [0]
for i in range(len(s)-1):
    a = s[0]
    s.remove(s[0])
    b = max(s)
    if b - a >= 0:
        c = c + [b-a]
print(max(c))
找每天买比特币时可得到的最大利润,找最大值
编辑于 2020-05-04 11:14:35 回复(0)
mo=list(map(int,input().split()));
ma=0;
le=len(mo)
for i in range(le):
    nex=mo[i+1:];
    now=mo[i];
    maN=max(nex) if nex else 0;
    ma=maN-now if (maN-now)>ma else ma
print(ma)

发表于 2020-03-10 10:39:56 回复(0)
## 法1
import sys
price=list(map(int,sys.stdin.readline().split()))
res=0
for i in range(len(price)):
    for j in range(i+1,len(price)):
        res=max(res,price[j]-price[i])
print(res)
## 法2
import sys
arr=list(map(int,sys.stdin.readline().split()))
cur_min=arr[0]
dp=[0]*len(arr)
for i in range(1,len(arr)):
    dp[i]=max(dp[i],arr[i]-cur_min)
    cur_min=min(cur_min,arr[i])
print(max(dp))

编辑于 2019-09-14 11:54:12 回复(0)
price = list(map(int, input().strip().split()))

profile = max(max(price[i+1:]) - price[i] for i in range(len(price) - 1))
print(max(profile, 0))

编辑于 2019-09-14 10:41:28 回复(0)
arr = [int(n) for n in input().split()]
dp = [0]*len(arr)
for i in range(1, len(arr)):
    for j in range(i):
        dp[i] = max(dp[i], arr[i]-arr[j])
print(max(dp))

发表于 2019-09-11 19:45:40 回复(0)
#python3
ipt=list(map(int,input().split()))
opt=-1
for i in range(0,len(ipt)):#将数列分为前后两段比较,每次向右移动一个数进行拆分
    if max(ipt[i:len(ipt)])-min(ipt[0:i+1])>opt:
        opt=max(ipt[i:len(ipt)])-min(ipt[0:i+1])
print(opt)

发表于 2019-09-11 14:12:31 回复(0)
def max_profit(lst):
    max_ = 0
    length = len(lst)
    for i in range(length):
        max_num = max(lst[i:])
        if max_num - lst[i] > max_:
            max_ = max_num - lst[i]
    print(max_)


def max_profit_2(lst):
    """
    解题思路:用min_before保存当日之前的最低价格,则当日价格price与min_before之差为当日卖出可获最大收益,用max_记录扫描过程中
    计算出的每个日卖出可获最大收益的最大值,并在扫描过程中更新min_before
    时间复杂度:O(n)
    空间复杂度:O(1)
    特殊情况:严格单调下降不予考虑(实际意义不大),如有需要可令max_ = -float("inf"), min_before = float("inf")
    """
    max_ = 0
    min_before = lst[0]
    for price in lst:
        if price - min_before > max_:
            max_ = price - min_before
        if price < min_before:
            min_before = price
    print(max_)


lst = list(map(int, input().split()))
max_profit_2(lst)

发表于 2019-08-23 10:23:41 回复(0)
arr = [int(elem) for elem in input().split()]
number = 0 for i in range(len(arr)-1):
    mairu = arr[i]
    mairchu = max(arr[i+1:])
    profit = mairchu - mairu if profit>number:
        number = profit print(number)
发表于 2019-08-13 14:58:49 回复(0)
"""
设dp[i]为以i为卖出点的最大收益
"""
import sys

if __name__ == "__main__":
    # sys.stdin = open("input.txt", "r")
    a = list(map(int, input().strip().split()))
    t_min = a[0]
    dp = []
    for i in range(len(a)):
        t_min = min(t_min, a[i])
        dp.append(a[i] - t_min)
    print(max(dp))

发表于 2019-07-10 16:28:31 回复(0)