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

枚举算法-day2

1.买股票的最佳时机

题目

解析

  • 记录最小值,然后遍历即可

代码

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        // 时间复杂度:O(n)
        // 空间复杂度:O(1)

        int n = prices.size();
        int ans = 0;

        int min_price = prices[0];
        for(int j = 1;j < n;j ++){
            ans = max(ans,prices[j] - min_price);
            min_price = min(min_price,prices[j]);
        }

        return ans;
    }
};

2.数位和相等数对的最大和

题目

解析

  • 哈希表中,键值对:对应数位和中最大的数;每次更新答案需要更新该数位和最大的数;

代码

class Solution {
    int f(int x){ // 计算 x 的数位和
        int sum = 0;
        while(x){
            sum += x % 10;
            x /= 10;
        }
        return sum;
    }

public:
    int maximumSum(vector<int>& nums) {
        // 时间复杂度:O(nlog U),U 为 max(nums)
        // 空间复杂度:O(log n)

        int n = nums.size();
        int ans = -1;

        unordered_map<int,int> cnt;

        for(int j = 0;j < n;j ++){
            auto it = cnt.find(f(nums[j]));// 寻找前面有没有相同数位和的数
            if(it != cnt.end()){
                ans = max(ans,it -> second + nums[j]);
            }
            cnt[f(nums[j])] = max(nums[j],cnt[f(nums[j])]);// 相同数位和保留最大的
        }

        return ans;
    }
};

3.数组中的最大数对和

题目

解析

  • 同理可得;

代码

class Solution {
    int f(int x){
        int ans = 0;
        while(x){
            ans = max(ans,x % 10);
            x /= 10;
        }
        return ans;
    }

public:
    int maxSum(vector<int>& nums) {
        // 时间复杂度:O(nlog U)
        // 空间复杂度:O(n)

        int n = nums.size();
        int ans = -1;

        unordered_map<int,int> cnt;

        for(int j = 0;j < n;j ++){
            auto it = cnt.find(f(nums[j]));
            if(it != cnt.end()){
                ans = max(ans,it -> second + nums[j]);
            }
            cnt[f(nums[j])] = max(cnt[f(nums[j])],nums[j]); 
        }   

        return ans;
    }
};

4.K 和数组对的最大数目

题目

解析

  • 用哈希表记录每个数的个数,而当 target 没有数的时候,必须 erase ;

代码

class Solution {
public:
    int maxOperations(vector<int>& nums, int k) {
        // 时间复杂度:O(n)
        // 空间复杂度:O(n)

        int n = nums.size();
        int ans = 0;

        unordered_map<int,int> cnt;

        for(int j = 0;j < n;j ++){
            auto it = cnt.find(k - nums[j]);

            if(it != cnt.end()){ // 找到了
                ans ++;
                cnt[k - nums[j]] --;
                if(cnt[k - nums[j]] == 0) cnt.erase(k - nums[j]);// 减到 0 了
            }else { // 没找到
                cnt[nums[j]] ++;
            }
        }

        return ans;
    }
};
http://www.dtcms.com/a/98173.html

相关文章:

  • python 列表-元组-集合-字典
  • 软件工程之软件开发模型(瀑布、迭代、敏捷、DevOps)
  • 综述速读|086.04.24.Retrieval-Augmented Generation for AI-Generated Content A Survey
  • 深度学习处理时间序列(6)
  • 自学-python-基础-注释、数据类型、运算符、判断、循环
  • 树莓派超全系列文档--(13)如何使用raspi-config工具其二
  • 中断管理常用API详解(三)
  • flatMap 介绍及作用
  • C#连接sqlite数据库实现增删改查
  • 大模型最新面试题系列:微调篇之微调框架(二)
  • AI赋能python数据处理、分析与预测操作流程
  • Vue背景介绍+声明式渲染+数据响应式
  • 基于Baklib的云内容中台落地实践
  • JMeter运行日志详细分析
  • Kafka Stream从入门到精通:构建高吞吐、低延迟的实时流处理应用
  • 力扣.旋转矩阵Ⅱ
  • sqli-labs靶场 less6
  • Android 串口配置
  • 双磁条线跟踪控制
  • LJF-Framework 第12章 LjfFilter拦截器设计
  • hbuilderx打包iOS上传苹果商店的最简流程
  • AI坦克智能决策:MOE模型的动态专家协作与加权融合
  • Python自动化模块:开启高效编程新时代
  • 乘AI之势,劲吹正能量之风:生成式人工智能(GAI)认证引领新时代
  • AudioFlinger与AudioPoliceManager初始化流程
  • unity客户端面试高频2(自用)
  • Redis底层数据结构实现
  • Python 科学计算
  • QML输入控件:Dial外观深度定制(4)
  • angr基础学习