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

c++贪心

本篇文章,我将同大家一起学习c++的贪心!!!

目录

第一题

题目链接

题目解析

代码原理

代码编写

第二题

题目链接

题目解析

代码原理

代码编写

第三题

题目链接

题目解析

代码原理

代码编写

第四题

题目链接

题目解析

代码原理

代码编写

第五题

题目链接

题目解析

代码原理

代码编写

思路拓展

第六题

题目链接

题目解析

代码原理

代码编写


 

第一题

题目链接

300. 最长递增子序列 - 力扣(LeetCode)

题目解析

代码原理

代码编写

class Solution {

public:

    int lengthOfLIS(vector<int>& nums) {

        int n = nums.size();

        vector<int> ret;

        ret.push_back(nums[0]);

        for(int i = 1; i < n; i++)

        {

            if(ret.back() < nums[i]) ret.push_back(nums[i]);

            else

            {

                int left = 0, right = ret.size() - 1;

                while(left < right)

                {

                    int mid = (left + right) >> 1;

                    if(ret[mid] < nums[i]) left = mid + 1;

                    else right = mid;

                }

                ret[left] = nums[i];

            }

        }

        return ret.size();

    }

};

第二题

题目链接

334. 递增的三元子序列 - 力扣(LeetCode)

题目解析

解释:三元子序列:条件:1.i - 1  < i < i + 1   2.nums[i - 1] < nums[i] < nums[i + 1]

代码原理

代码编写

class Solution {

public:

    bool increasingTriplet(vector<int>& nums) {

        int n = nums.size();

        int a = nums[0], b = INT_MAX;

        for(int i = 1; i < n; i++)

        {

            if(nums[i] > b) return true;

            else if( nums[i] > a) b = nums[i];

            else a = nums[i];

        }

        return false;

    }

};

第三题

题目链接

674. 最长连续递增序列 - 力扣(LeetCode)

题目解析

代码原理

代码编写

class Solution {

public:

    int findLengthOfLCIS(vector<int>& nums) {

        int n = nums.size(), ret = 0;

        for(int i = 0; i < n;)

        {

            int j = i + 1;

            while(j < n && nums[j] > nums[j - 1]) j++;

            ret = max(ret, j - i);

            i = j;

        }

        return ret;

    }

};

第四题

题目链接

121. 买卖股票的最佳时机 - 力扣(LeetCode)

题目解析

代码原理

代码编写

class Solution {

public:

    int maxProfit(vector<int>& prices) {

        int n = prices.size(), ret = 0;

        int min_prices = INT_MAX, max_prices = 0;

        for(int i = 0; i < n; i++)

        {

                min_prices = min(min_prices, prices[i]);

                max_prices = max(max_prices, prices[i] - min_prices);

        }

        return max_prices;

    }

};

第五题

题目链接

122. 买卖股票的最佳时机 II - 力扣(LeetCode)

题目解析

代码原理

代码编写

class Solution {

public:

    int maxProfit(vector<int>& prices) {

        int ret = 0;

        for(int i = 0; i < prices.size(); i++)

        {

            if(i + 1 < prices.size() && prices[i] < prices[i + 1]) ret += prices[i + 1] - prices[i];

        }

        return ret;

    }

};

思路拓展

第一种思路:找到上升段,然后末减初

第二种思路:找到每一上升小段,就进行一次末减初,然后移动右指针,持续计算,求出最大结果

代码

  int n = prices.size();
        int ret = 0;
        // for(int left = 0; left < n; left++)
        // {
        //     int right = left;
        //     while(right + 1 < n && prices[right + 1] > prices[right])
        //     {
        //         right++;
        //     }
        //     ret += prices[right] - prices[left];
        //     left = right; 
        // }

第六题

题目链接

1005. K 次取反后最大化的数组和 - 力扣(LeetCode)

题目解析

代码原理

代码编写

class Solution {

public:

    int largestSumAfterKNegations(vector<int>& nums, int k) {

        int n = nums.size(), m = 0, min_nums = INT_MAX,ret = 0;

        for(int i = 0; i < n; i++)

        {

            if(nums[i] < 0)

            m++;

            min_nums = min(min_nums, abs(nums[i]));

        }

        if(m > k)

        {

            sort(nums.begin(),nums.end());

            for(int i = 0; i < k; i++)

            {

                ret += -nums[i];

            }

            for(int i = k; i < n; i++)

            {

                ret += nums[i];

            }

        }

        else

        {

            for(auto cur: nums)

            {

                ret += abs(cur);

            }

            if((k - m) % 2)

               ret -= min_nums * 2;

        }

            return ret;

    }

};

注意:这里的最小值一定要记得加绝对值。

本篇文章的内容就先到这里,最后也祝大家除夕快乐,春节快乐!!! 

记得一键三连哦!!!


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

相关文章:

  • 论文阅读(十三):复杂表型关联的贝叶斯、基于系统的多层次分析:从解释到决策
  • 51单片机开发:定时器中断
  • 准备知识——旋转机械的频率和振动基础
  • 开源 OA 办公系统
  • 【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR、流水线及伪指令
  • 面向对象编程 vs 面向过程编程
  • 【1】阿里面试题整理
  • Linux网络 应用层协议 HTTP
  • 选择困难?直接生成pynput快捷键字符串
  • 代码随想录算法训练营day29(0123)
  • vue页面,绘制项目的计划进度和实际进度;展示不同阶段示意图
  • 07JavaWeb——Mysql02
  • 02-硬件入门学习/嵌入式教程-Type-C使用教程
  • 【读书笔记】万字浅析游戏场景中常见的渲染性能优化手段
  • 学到一些小知识关于Maven 与 logback 与 jpa 日志
  • 探索Baklib企业内容管理系统CMS优化企业文档管理的最佳实践
  • 【华为OD-E卷 - 基站维修工程师 100分(python、java、c++、js、c)】
  • Swoole的MySQL连接池实现
  • ResNeSt: Split-Attention Networks 参考论文
  • 用layui表单,前端页面的样式正常显示,但是表格内无数据显示(数据库连接和获取数据无问题)——已经解决
  • 动手学图神经网络(6):利用图神经网络进行点云分类
  • 期权帮|做空股指期货是否会对股指产生影响?
  • 深入学习Java的线程的生命周期
  • 【快速上手】阿里云百炼大模型
  • 领域知识图谱的应用案例---下
  • vxe-table和element表尾合计行