当前位置: 首页 > article >正文

【贪心算法2】

力扣122.买卖股票最佳时机Ⅱ

链接: link

思路

要求最大利润,可以分解成子问题求解,在最低价格买入,最高价格卖出。
假如第0天价格最低,第3天价格最高,利润=prices[3] - pricnes[0],
可以将利润公式拆解成
(prices[3]-prices[2])+(prices[2]-prices[1])+(prices[1]-prices[0])
最终变成了求相邻两天的利润,所以可以得到一个关于利润的列表,只需要将这个列表大于0的相加即可求出最大利润

方法1:

class Solution {
    public int maxProfit(int[] prices) {
        int res = 0;
        for(int i = 1;i<prices.length;i++){
            res += Math.max(prices[i] - prices[i-1],0);
        }
        return res;
    }
}

相似题型

思路

上一道题是求利润最大化,而这道题是只能进行一次买卖,要求这一次利润最大
121.买卖股票的最佳时机
链接: link

class Solution {
    public int maxProfit(int[] prices) {
        int res = 0;
        int minPrice = prices[0];
        for (int p : prices) {
            res = Math.max(res, p - minPrice);
            minPrice = Math.min(minPrice, p);
        }
        return res;
    }
}

55.跳跃游戏
链接: link

class Solution {
    public boolean canJump(int[] nums) {
        if(nums.length == 1) return true;
        int cover = 0;
        for(int i =0;i<=cover;i++){
            cover = Math.max(i + nums[i],cover);
            if(cover >= nums.length - 1){
                return true;
            }
        }
        return false;
    }
}

45.跳跃游戏Ⅱ

思路

这道题需要记录2个距离,一个是当前位置能走的最大距离和下一步能走的最大距离,当下一步能走的最大距离覆盖终点即为最优解。注意要先更新下一步最大距离,当i=当前最大距离时再更新当前最大距离。
链接: link

class Solution {
    public int jump(int[] nums) {
        if (nums.length == 1)
            return 0;
        int cover_1 = 0; // 当前位置的覆盖范围
        int cover_2 = 0; // 下一个位置的覆盖范围
        int cnt = 0; // 记录跳次数
        for (int i = 0; i < nums.length; i++) {
            cover_2 = Math.max(i + nums[i], cover_2);
            // 此时只需要走一步即可到达终点
            if (cover_2 >= nums.length - 1) {
                cnt++;
                break;
            }
            // 走到当前覆盖的最大区域时,更新下一步可达的最大区域
            if (i == cover_1) {
                cover_1 = cover_2;
                cnt++;
            }
        }
        return cnt;
    }
}

http://www.kler.cn/a/577741.html

相关文章:

  • 第8章 访问管理(网络安全防御实战--蓝军武器库)
  • hooks useModule自定义hooks (二次封装AgGridReact ag-table)自定义表头,自定义表头搜索
  • 动态规划中一维与二维DP表的选择:从问题本质到C++实现
  • 服务器内存
  • Greenplum6.19集群搭建
  • 整理了一下网络编程中TCP的状态
  • K8s 1.27.1 实战系列(一)介绍及准备工作
  • Elasticsearch:使用 BigQuery 提取数据
  • flask学习3-深入
  • Windows 系统性能缓慢的原因
  • 网络安全创刊 网络安全紫队
  • libilibi项目优化(1)使用Redis实现缓存
  • GetWindowLongPtr函数分析
  • 常用的分布式ID设计方案
  • AI 人工智能深度解析:从基础到前沿,全面掌握未来科技
  • 【Linux】冯诺依曼体系与操作系统理解
  • Excel中使用VBA自动生成排班表
  • word插入图片,不改变图片大小
  • 体验OpenManus
  • git忽略特定文件或者文件夹