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

24.贪心算法2

买卖股票

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        bool godown=1;
        int prev=prices[0];
        vector<int> min,max;
        for(int i=1;i<prices.size();i++){
            if(godown&&prices[i]>prev){
                min.push_back(prices[i-1]);
                
                godown=0;
            }else if(!godown&&prices[i]<prev){
                godown=1;
                max.push_back(prices[i-1]);
            }
            prev=prices[i];
        }
        if(max.size()<min.size()){
            max.push_back(prices[prices.size()-1]);
        }
        int res=0;
        for(int i=0;i<max.size();i++){
            res+=max[i];
            res-=min[i];
        }
        return res;
    }
};

也可记录每天卖出昨天股票的利润,这样将所有正利润加起来,就是总利润。

跳跃游戏

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int cur=0;
        int n=nums.size();
        if(n==1)return 1;
        while(cur<n){
            int max_hop=0;
            int index=cur;
            for(int i=1;i<=nums[cur];i++){
                if(cur+i==n-1)return 1;
                if(i+nums[cur+i]>max_hop){
                    max_hop=i+nums[cur+i];
                    index=cur+i;
                }
            }
            if(cur==index)return 0;
            cur=index;
        }
        return 0;
    }
};

跳跃游戏2

class Solution {
public:
    int jump(vector<int>& nums) {
        int cur=0;
        int n=nums.size();
        int count=0;
        if(n==1)return count;
        while(cur<n){
            int max_hop=0;
            int index=cur;
            for(int i=1;i<=nums[cur];i++){
                if(cur+i==n-1)return count+1;
                if(i+nums[cur+i]>max_hop){
                    max_hop=i+nums[cur+i];
                    index=cur+i;
                }
            }
            if(cur==index)return -1;
            cur=index;
            count++;
        }
        return -1;
    }
};

K次取反后最大化的数组和

class Solution {
public:
    int largestSumAfterKNegations(vector<int>& nums, int k) {
        sort(nums.begin(),nums.end());
        int count=0;
        for(;k>0&&count<nums.size();k--){
            if(nums[count]>0)break;
            nums[count]=-nums[count];
            count++;
        }
        if(k>0&&k%2){
            sort(nums.begin(),nums.end());
            nums[0]=-nums[0];
        }
        int res=0;
        for(int i=0;i<nums.size();i++){
            res+=nums[i];
        }
        return res;
    }
};

这个做法的复杂度为O(nlogn)

相关文章:

  • 描述Python中的类和对象
  • 【无标题】docker-compose ps 和dokcer ps的区别
  • 【软考自学】初级程序员笔记
  • 【算法与数据结构】Dijkstra算法求单源最短路径问题
  • 业务应用和大数据平台的数据流向
  • 量子计算的数学基础:复数、矩阵和线性代数
  • JVM之JVM的组成
  • 【一起学Rust | 框架篇 | Tauri2.0框架】在Tauri应用中设置Http头(Headers)
  • 如何加固织梦CMS安全,防webshell、防篡改、防劫持,提升DedeCMS漏洞防护能力
  • PT9010S 单触控双输出 LED 调光调色温 IC
  • 大模型压测方法
  • AI驱动的前端自动化测试:提升效率,保障质量
  • 架构师论文《论湖仓一体架构及其应用》
  • 洛谷 最长公共子序列
  • 登录-11.Interceptor-入门
  • DVWA靶场通关——SQL Injection篇
  • 相似性搜索(2)
  • 技术面反问环节专项指南
  • 23.2、云计算安全机制与案例分析
  • Spring Boot 项目中,JDK 动态代理和 CGLIB 动态代理的使用
  • 中国建设人才信息网站查询/吉林seo外包
  • 如何进入网站管理员界面/万网域名交易
  • 怎么做淘宝企业网站/关键路径
  • 网站建设的行业资讯_/seo搜索优化 指数
  • 做网站要会什么/百度经验首页登录官网
  • 手把手教你优化网站/2024年的新闻