贪心算法篇2

“星辰野草,造出无边的天地~” 


最⻓递增⼦序列

(1) 题目解析    

(2) 算法原理        

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        // 使用dp 
        int n = nums.size(), ret = 1;
        // 初始化为1
        vector<int> dp(n+1,1);
        // 从第二个位置开始
        for(int i=1;i<n;++i)
        {
            // 子序列搜索
            for(int j=0;j<i;++j)
            {
                // 可以进行拼接
                if(nums[j] < nums[i]) dp[i] = max(dp[i],dp[j] + 1);
            }
            ret = max(ret,dp[i]);
        }
        return ret;
    }
};

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        // 使用贪心
        vector<int> vec; // 记录子序列长度
        vec.push_back(nums[0]); // 初始化
        for(int i=1;i<nums.size();++i)
        {
            // 如果是最大的直接插入即可
            if(vec.back() < nums[i]) vec.push_back(nums[i]);
            else
            {
                // 二分查找
                int left = 0,right = vec.size() - 1;
                while(left < right)
                {
                    int mid = (left + right) >> 1;
                    // 哪个分支暗含“相等” 不能跳过mid
                    if(nums[i] > vec[mid]) left = mid+1;
                    else right=mid;
                }
                // 更新较小值
                vec[left] = nums[i];
            }
        }
        return vec.size();
    }
};

递增的三元⼦序列

(1) 题目解析

        这题同上一道题相差无几!甚至更为简单,因为我们只需要判断这个子序列长度是否超过3。

(2) 算法原理   

class Solution {
public:
    bool increasingTriplet(vector<int>& nums) {
        // 这里默认给b一个无穷大的值
        // 由nums中的小数来替换
        int a = nums[0],b = INT_MAX;
        for(int i=1;i<nums.size();++i)
        {
            if(b < nums[i]) return true; // 找打了
            else if(a < nums[i]) b = nums[i]; // 替换b
            else a = nums[i];
        }
        return false;
    }
};

最⻓连续递增序列 

(1) 题目解析

(2) 算法原理 

class Solution {
public:
    int findLengthOfLCIS(vector<int>& nums) {
        int n = nums.size();
        int left = 0,right = 1,ret = 0;
        while(left < n)
        {
            while(right < n && nums[right] > nums[right-1]) right++;
            ret = max(ret,right - left);
            left = right++;
        }
        return ret;
    }
};

买卖股票的最佳时机

(1) 题目解析  

(2) 算法原理

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int prevMin = prices[0], n = prices.size();
        int ret = 0;
        for(int i=1;i<n;++i)
        {
            ret = max(ret,prices[i] - prevMin);
            prevMin = min(prevMin,prices[i]);   // 更新
        }
        return ret;
    }
};

买卖股票的最佳时机 Ⅱ 

(1) 题目解析 

(2) 算法原理 

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        // 方法1:双指针+贪心
        int n = prices.size();
        int left = 0,right = left + 1;
        int ret = 0;
        while(left < n)
        {
            while(right < n && prices[right] > prices[right - 1]) right++;
            ret += prices[right - 1] - prices[left];
            left = right++;
        }
        return ret;
    }
};

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        // 方法2:拆分交易
        int ret = 0;
        for(int i=0;i<prices.size()-1;++i)
        {
            if(prices[i] < prices[i+1]) ret += prices[i+1] - prices[i];
        }
        return ret;
    }
};

 


本篇到此结束,感谢你的阅读。

祝你好运,向阳而生~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/370898.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

彻底学会系列:一、机器学习之线性回归

1.基本概念 线性回归&#xff1a; 有监督学习的一种算法。主要关注多个因变量和一个目标变量之间的关系。 因变量&#xff1a; 影响目标变量的因素&#xff1a; X 1 , X 2 . . . X_1, X_2... X1​,X2​... &#xff0c;连续值或离散值。 目标变量&#xff1a; 需要预测的值: t…

黑豹程序员-ElementPlus选择图标器

ElementPlus组件提供了很多图标svg 如何在你的系统中&#xff0c;用户可以使用呢&#xff1f; 这就是图标器&#xff0c;去调用ElementPlus的icon组件库&#xff0c;展示到页面&#xff0c;用户选择&#xff0c;返回选择的组件名称。 效果 代码 <template><el-inpu…

双非本科准备秋招(16.1)—— 力扣二叉树

1、101. 对称二叉树 检查是否对称&#xff0c;其实就是检查左节点等不等于右节点&#xff0c;我们可以用递归来做。 如果左右节点都为null&#xff0c;说明肯定对称呀&#xff0c;返回true。 如果一个为null一个不为null&#xff0c;或者左右的值不相等&#xff0c;则为false。…

安卓文件传输 -- Android File Transfer

Android File Transfer是一款专门为Mac用户设计的软件&#xff0c;用于在Android设备与Mac之间传输文件。该软件支持多种文件类型&#xff0c;包括图片、音乐、视频、文档等&#xff0c;使用户能够轻松地将文件从Android设备传输到Mac或从Mac传输到Android设备。 Android File…

MoneyBox: 1靶机

主机发现 端口扫描 爆破到了ftp的账号密码&#xff0c;这是ftp的允许匿名登陆&#xff0c;密码为空也是可以的。 ftp 192.168.10.131 输入账号anonymous&#xff0c;密码为空或者anonymous1234也可以&#xff0c;连接上ftp后ls一下&#xff0c;看看有什么内容。 目录爆破发现bl…

NLP入门系列—分词 Tokenization

NLP入门系列—分词 Tokenization 分词是 NLP 的基础任务&#xff0c;将句子&#xff0c;段落分解为字词单位&#xff0c;方便后续的处理的分析。 本文将介绍分词的原因&#xff0c;中英文分词的3个区别&#xff0c;中文分词的3大难点&#xff0c;分词的3种典型方法。最后将介…

[office] Excel2007在工作簿中创建区域名称 #职场发展#经验分享

Excel2007在工作簿中创建区域名称 Excel 提供了几种不同的方法来创建区域名称。但在开始之前&#xff0c;必须注意关于可接受内容的重要规则: 名称不能含有空格。可以用一个下划线字符来代替空格(如Annual Total ) 。 可以使用字母和数字的任意组合&#xff0c;但是名称必须以…

备份RK35XX 设备的ubuntu根文件系统的方法

简介 我们使用 RK35XX 提供的SDK包制作了一个完整的 ubuntu 镜像,烧录到设备中,会在设备中安装很多我们需要的软件,运行的一些自己写的脚本和业务程序,当我们有很多台设备时,不可能每台都一个个去安装,此时我们就需要一个工具来备份当前设备的根文件系统,然后再放到 SD…

ywtool dhcp命令

一.dhcp功能介绍 就是通过脚本实现dhcp地址池的增、删、改、查这几个功能日志文件路径: /var/log/ywtools/ywtool-dhcp.log/usr/local/ywtools/config/config.ini中account参数(ywtool dhcp这个命令用的,但是这个命令只能配置1个地址池,所以这里面的参数没什么意义) 二.配置…

生物素 PEG4 甲基四嗪,Biotin-PEG4-methyltetrazine,用于标记、追踪和分离特定的分子或细胞

生物素四聚乙二醇甲基四嗪&#xff0c;生物素 PEG4 甲基四嗪&#xff0c;Biotin-PEG4-methyltetrazine&#xff0c;用于标记、追踪和分离特定的分子或细胞 您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;生物素四聚乙二醇甲基四嗪&#xff0c;生物素 PEG4 甲基四嗪…

RK Camera hal 图像处理

soc&#xff1a;RK3568 system:Android12 今天发现外接的USBCamera用Camera 2API打开显示颠倒&#xff0c;如果在APP 里使用Camera1处理这块接口较少&#xff0c;调整起来比较麻烦 RK Camera hal位置&#xff1a;hardware/interfaces/camera 核心的文件在&#xff1a; 开机…

windows 搭建nginx http服务

下载 下面链接直接点击下载&#xff0c;下载的就是包含rtmp服务器相关功能的&#xff0c;只不过需要配置下 Index of /download/ (ecsds.eu) nginx 1.7.11.3 Gryphon.zip直接点击额下面的连接即可下载 http://nginx-win.ecsds.eu/download/nginx%201.7.11.3%20Gryphon.zip …

Go语言Gin框架安全加固:全面解析SQL注入、XSS与CSRF的解决方案

前言 在使用 Gin 框架处理前端请求数据时&#xff0c;必须关注安全性问题&#xff0c;以防范常见的攻击。本文将探讨 Gin 框架中常见的安全问题&#xff0c;并提供相应的处理方法&#xff0c;以确保应用程序的稳健性和安全性。 处理前端请求数据时&#xff0c;确保应用程序的…

GaussDB新体验,新零售选品升级注入新思路【华为云GaussDB:与数据库同行的日子】

选品思维&#xff1a;低频VS高频 一个的商超&#xff0c;假设有50个左右的品类&#xff0c;每个品类下有2到10个不等的商品。然而如此庞大的商品&#xff0c;并非所有都是高频消费品。 结合自身日常的消费习惯&#xff0c;对于高频和低频的区分并不难。一般大型家电、高端礼盒…

802.11n 802.11ac (WiFi 4/5 )的核心要点

802.11n 802.11ac &#xff08;WiFi 4/5 &#xff09;是什么&#xff1f; WiFi 4&#xff1a; Ieee 802.11n Enhancements for High Throughput &#xff08;HT&#xff09; WiFi 5&#xff1a; Ieee 802.11ac Enhancements for Very High Throughput &#xff08;VHT&#x…

前缀和 acwing

思路&#xff1a;两个数组&#xff0c;一个数组用来保存数据&#xff0c;一个数组来求对应项的和 前缀和S[r]-s[r-1] 空出来下标0 从1开始 方便表示&#xff0c;防止越界 c代码实现: #include<iostream> using namespace std; const int N1000000; int a[N],s[N]; …

Linux底层基础知识

一.汇编&#xff0c;C语言&#xff0c;C&#xff0c;JAVA之间的关系 汇编&#xff0c;C语言&#xff0c;C可以通过不同的编译器&#xff0c;编译成机器码。而java只能由Java虚拟机识别。Java虚拟机可以看成一个操作系统&#xff0c;Java虚拟机是由汇编&#xff0c;C&#xff0c…

【刷题题解】最长回文子序列

给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列 这道题&#xff0c;一眼动态规划&#xff0c;但是即使动起来也规划…

总结了一下中继引擎(can中继器,TCP总机器)开发实际经验

多路数据进行中继的研究 1.数据中继的概念 数据中继是一种数据传输技术&#xff0c;用于在两个通信设备之间提供数字信号的传输。它利用数字信道传输数据信号&#xff0c;可以提供永久性和半永久性连接的数字数据传输信道。 数据中继的主要作用是提高通信质量和可靠性&#xf…

问题:金属电化学反应的实质是氧化还原反应,被腐蚀金属发生还原反应( ) #知识分享#知识分享#媒体

问题&#xff1a;金属电化学反应的实质是氧化还原反应&#xff0c;被腐蚀金属发生还原反应(  ) A、正确 B、错误 参考答案如图所示
最新文章