【贪心算法】Leetcode 714. 买卖股票的最佳时机含手续费

该博客介绍了如何使用贪心算法解决LeetCode上的714题,即在考虑手续费的情况下,找到买卖股票获取最大利润的策略。作者通过分析三种不同情况,即股票价格小于买入点、等于买入点加上手续费以及大于买入点加上手续费,来决定是否进行交易,并更新最低买入价格。最终通过遍历股票价格数组,累计正利润,得到最大收益。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【贪心算法】Leetcode 714. 买卖股票的最佳时机含手续费

题目

给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。

你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。

返回获得利润的最大值。

注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。

思路

  • 贪心思想:每次收集正利润,然后累加起来就可以,遇到负利润就跳过
  • 第一种情况,股票的价格小于之前买入点,那么更新最小价格
  • 第二种情况:股票价格低于买入价格与手续费之和,那么直接跳过
  • 第三种情况:股票价格大于买入价格与手续费之和,计算利润,然后累加,更新最低价格

代码

class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        int result = 0;// 最后的利润
        int minprice = prices[0];// 记录最小的价格

        for(int i = 1; i < prices.size(); i++)
        {
            // 贪心思想:收集最大利润  只要每次收集正利润就可以
            if(prices[i] < minprice)
            {
                // 更新最低买入点
                minprice = prices[i];
            }

            if(prices[i] > minprice && prices[i] < minprice + fee)
            {
                // 不够成本
                continue;
            }

            if(prices[i] > minprice + fee)
            {
                // 此时产生正利润
                result += prices[i] - minprice - fee;// 收集正利润
                // 更新买入点
                minprice = prices[i] - fee;//因为本次卖出不一定是最大利润  所以为了防止多次减去手续费(手续费只要剪掉一次就可以)
            }
        }
        return result;
    }
};

<think>好的,用户之前问了关于BIOS键盘锁定的问题,现在又提出了一个新问题:键盘在BIOS里能用,但进入系统后无法使用,需要分析原因和解决方法。首先,我需要确认用户的使用场景。用户可能是在使用Windows系统,因为这是最常见的,但也不排除其他系统。用户可能是普通用户,遇到硬件突然失灵的情况,需要快速解决。 接下来,用户的需求是找出问题原因并解决。深层需求可能包括尽快恢复键盘功能,避免影响工作或使用,同时可能担心硬件故障,但用户已经确认键盘在BIOS可用,说明硬件本身可能没问题,问题可能出在系统设置或驱动上。 需要考虑的可能原因有很多。首先,USB端口或驱动问题。系统可能没有正确识别USB控制器,特别是在系统更新后驱动可能损坏。然后是系统服务或设置问题,比如某些服务被禁用,或者USB选择性暂停设置导致的问题。另外,快速启动功能也可能导致兼容性问题。还有可能是键盘的驱动程序损坏,或者系统文件损坏。此外,用户账户控制或第三方软件冲突也有可能。 解决方法需要一步步来,从简单到复杂。比如检查设备管理器中的驱动状态,卸载后重新扫描硬件更改。检查USB选择性暂停设置,关闭快速启动。进行系统文件检查或系统还原。如果这些都不行,可能需要进入安全模式排查,或者考虑系统重置。还要提醒用户检查外设冲突,比如是否有其他USB设备干扰,或者尝试不同的USB端口。 需要确保回答结构清晰,分点列出可能原因和对应的解决方法,语言要易懂,避免使用过多技术术语,但也要准确。同时要提醒用户注意数据备份,特别是在进行系统还原或重置时。此外,可能需要询问用户是否尝试过某些步骤,但根据问题描述,用户可能需要完整的指导,所以应涵盖所有可能的解决方案。</think>### 键盘在BIOS可用但进入系统后失效的常见原因及解决方法 --- #### **可能原因分析** 1. **USB驱动异常** - 系统未正确加载USB控制器驱动(常见于Windows更新后或驱动冲突) 2. **系统服务/功能冲突** - USB选择性暂停(电源管理功能) - 快速启动(Fast Startup)导致兼容性问题 3. **键盘驱动损坏** - 特定键盘(如机械键盘/带驱动软件的外设)驱动异常 4. **系统权限或安全软件拦截** - 用户账户控制(UAC)或杀毒软件限制硬件访问 5. **硬件冲突/接口问题** - USB接口供电不足(多见于USB 3.0接口或连接过多外设) - 系统误判键盘为其他设备(如HID兼容设备冲突) --- ### **分步排查与解决方法** --- #### **步骤 1:基础检查** 1. **切换USB接口** - 尝试将键盘插到其他USB口(优先使用主板背面的接口) - 若使用USB分线器/Hub,直接连接主板接口测试 2. **重启资源管理器** - 按`Ctrl+Shift+Esc`打开任务管理器 → 右键`Windows资源管理器` → `重新启动` 3. **强制重启系统** - 长按电源键10秒强制关机 → 重新开机(可能清除临时硬件错误) --- #### **步骤 2:检查驱动状态** 1. **设备管理器操作** - 进入系统后,用其他键盘或屏幕键盘(`Win+Ctrl+O`调出)操作: - 右键开始菜单 → `设备管理器` - 展开`键盘`和`通用串行总线控制器` - 右键异常设备(带黄色感叹号) → `卸载设备` → 重启系统自动重装驱动 2. **禁用USB选择性暂停** - 在设备管理器中: - 双击`通用串行总线控制器`下的`USB Root Hub` - 选择`电源管理` → 取消勾选`允许计算机关闭此设备以节约电源` - 对所有USB Root Hub重复此操作 --- #### **步骤 3:系统功能调整** 1. **关闭快速启动** - 控制面板 → `电源选项` → `选择电源按钮的功能` → `更改当前不可用的设置` → 取消勾选`启用快速启动` 2. **检查键盘筛选键** - `设置` → `辅助功能` → `键盘` → 关闭`筛选键`(可能误触发长按响应) --- #### **步骤 4:深度修复** 1. **系统文件检查** - 管理员权限运行CMD,输入: ```bash sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth ``` 2. **系统还原/修复安装** - 使用Windows安装U盘启动 → `修复计算机` → 尝试`系统还原`或`重置此电脑`(保留文件) --- #### **步骤 5:特殊场景处理** - **外接键盘笔记本键盘冲突** - 部分笔记本需在BIOS中关闭`Internal Keyboard`(仅限外接键盘时) - 路径示例:`Advanced` → `Keyboard/Mouse Features` - **PS/2键盘兼容模式** - 若使用PS/2接口键盘,在BIOS中开启`PS/2 Legacy Support` --- ### **紧急情况应对** - **临时使用屏幕键盘** 按`Win+Ctrl+O`调出虚拟键盘完成必要操作 - **PE系统测试** 通过U盘启动PE系统,测试键盘是否正常(确认是否为硬件问题) --- ### 总结建议 优先按`驱动检查 → 电源管理调整 → 系统修复`顺序操作,若仍无效可尝试外接USB 2.0键盘测试。若所有外设均失效,需排查主板USB控制器硬件故障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少写代码少看论文多多睡觉

求打赏,求关注,求点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值