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

Leetcode刷题. 贪心算法

贪心算法:

        比较传统的解释:将整个问题拆解为几个小问题,找到小问题的最优解,加起来就是整个问题的全局最优解。对于现在的我理解贪心就是一种感觉,给出证明很难,解题思路一般就是认真读题,发掘题目的条件,然后尝试给出算法。

11. 盛最多水的容器

         一个显而易见的条件:水的面积取决于底边的长度和水池两边的最短边,因此可以首先选择最长的底边,然后在此基础上在选较高的水池的一边,在这个过程中计算面积最大值,保存即可。

class Solution {
public:
    int maxArea(vector<int>& height) {
        int maxArea = 0;
        for (int i = 0, j = height.size() - 1; i < j; ) {
            if (height[i] <= height[j]) {
                maxArea = max((j - i) * height[i], maxArea);
                i++;
            } else {
                maxArea = max((j - i) * height[j], maxArea);
                j--;
            }
        }
        return maxArea;
    }
};

122. 买卖股票的最佳时机 II

        求解思路:累加每天股票变化的增加的部分,比如1和5是涨的,那么最后的结果肯定是涨的,所以需要把该部分累加。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int profit = 0;
        for (int i = 0; i < prices.size(); i++) {
            for (int j = i + 1; j < prices.size() && prices[j] - prices[i] >= 0; j++, i++) {
                profit += prices[j] - prices[i];
            }
        }
        return profit;
    }
};

680. 验证回文串 II

        这道题的思路还是比较直观的,就是双指针判断然后处理删除的情况,关键在于怎么处理删除的情况需要重点理解,这里体现了根据局部解推出全局解的思想。

class Solution {
public:
    bool validPalindrome(string s) {
        int left = 0, right = s.size() - 1;
        while (left < right) {
            if (s[left] != s[right]) {
                return isPalindrome(s, left + 1, right) || isPalindrome(s, left, right - 1);
            }
            left++;
            right--;
        }
        return true;
    }

    bool isPalindrome(const string& s, int left, int right) {
        while (left < right) {
            if (s[left] != s[right]) {
                return false;
            }
            left++;
            right--;
        }
        return true; 
    }
};


http://www.kler.cn/news/358447.html

相关文章:

  • MySQL【知识改变命运】10
  • 408数据结构-查找的基本概念,顺序查找 自学知识点整理
  • 【React】useLayoutEffect、useInsertionEffect
  • 如何将一个前端项目装进 docker image 里
  • 科研绘图系列:R语言散点相关系数图(scatter plot)
  • linux系统中chmod用法详解
  • 贪心算法简记
  • 数据分析和可视化python库orange简单使用方法
  • python 基础笔记 2(函数, 类)
  • 数据结构(C语言):顺序表
  • 计算机网络基本架构示例2
  • 【前端学习】HTML+CSS+JavaScript 入门教程
  • 【云原生网关】Higress 从部署到使用详解
  • C++游戏开发入门:用 SDL 实现你的第一个 2D 游戏
  • 小米等手机彻底关闭快应用
  • 制作ppt技巧
  • JavaScript 数学运算与日期处理
  • 分布式锁-redis实现方案
  • 搭建localhost本地 ChatGPT 模型与总结
  • STM32+DHT11温湿度传感器(含完整代码)