day32 买卖股票的最佳时机Ⅱ 跳跃游戏 跳跃游戏Ⅱ

题目1:122  买卖股票的最佳时机Ⅱ

题目链接:122 买卖股票的最大时机Ⅱ

题意

整数数组prices[i]表示某股票的第i天的价格,每天可买卖股票且最多持有1股股票,返回最大利润

利润拆分,拆分为每天的利润      每天的正利润相加  得到总利润

局部最优:只收获每天的正利润  全局最优:利润最大

代码

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int result = 0;
        for(int i=1;i<prices.size();i++){
            if(prices[i]-prices[i-1]>0) result += prices[i]-prices[i-1];
        }
        return result;
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

题目2:55 跳跃游戏

题目链接:55 跳跃游戏

题意

非负整数数组数组中的每个元素代表在该位置可以跳跃的最大长度  是否能够到达最后一个下标

当前处于数组的第一个下标处

不看每次具体跳几步,只看覆盖范围是否包含终点  在覆盖范围内的位置都可以被跳到

局部最优:每次取最大的覆盖范围    全局最优:得到最大的覆盖范围

代码

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int cover = 0;
        for(int i=0;i<=cover;i++){
            //更新覆盖范围
            cover = max(cover,i+nums[i]);
            if(cover>=nums.size()-1) return true;
        }
        return false;
    }
};
  • 时间复杂度: O(n)
  • 空间复杂度: O(1)

题目3:45 跳跃游戏Ⅱ

题目链接:45 跳跃游戏Ⅱ

题意

非负整数数组元素nums[i]表示可以跳转的最大长度,返回到达最后一个元素的最小跳跃次数,初始位置为nums[0]

每一步尽可能地往远跳,一旦跳到终止位置,最少的跳跃步数增加覆盖范围

代码

class Solution {
public:
    int jump(vector<int>& nums) {
       int cur = 0;
       int next = 0;
       int result = 0;
       for(int i=0;i<nums.size();i++){
           next = max(next, i + nums[i]);
           if(i==cur){
               if(cur!=nums.size()-1){
                   result++;
                   cur = next;
                   if(cur>=nums.size()-1) break;
               }
           }
       }
       return result;
    }
};
  • 时间复杂度: O(n)
  • 空间复杂度: O(1)
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用上述trade_day来交易股票池中的股票的代码实现: ```python import tushare as ts pro = ts.pro_api('你的token') # 这里需要填写你的tushare token # 股票池 stock_pool = ['600519.SH', '000858.SZ', '601318.SH', '000651.SZ', '601888.SH'] # 获取股票交易日历 cal = pro.trade_cal(exchange='', start_date='20160101', end_date='20211231') trade_days = cal[cal.is_open == 1]['cal_date'].values # 遍历所有交易日 for i, trade_day in enumerate(trade_days): if i >= 1500: break # 获取当日所有股票行情数据 df = pro.daily(trade_date=trade_day) # 进行股票交易 for code in stock_pool: # 获取股票当日行情数据 stock_data = df[df.ts_code == code] if len(stock_data) == 0: continue # 判断是否买入股票 if stock_data.iloc[0]['pct_chg'] > 0: print(trade_day, code, '买入') # 判断是否卖出股票 elif stock_data.iloc[0]['pct_chg'] < 0: print(trade_day, code, '卖出') # 否则不进行交易 else: pass ``` 这段代码与之前的代码基本相同,只是在进行股票交易的部分进行了修改。我们首先定义了一个股票池,然后在每个交易日中遍历股票池中的所有股票。对于每个股票,我们从当日所有股票的行情数据中筛选出该股票的行情数据,然后根据涨跌幅判断是否买入或卖出该股票,或者不进行交易。如果买入或卖出,则打印出交易日期、股票代码和交易动作。注意,这里同样需要用到tushare的API,所以需要先在tushare官网上注册账号并获取token,然后将token替换代码中的相应部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值