每日算法-250422

news2025/4/23 13:45:35

每日算法 - 250422


1561. 你可以获得的最大硬币数目

题目

Problem 1561

思路

贪心

解题过程

根据题意,我们想要获得最大的硬币数目。每次选择时,有三堆硬币:最大的一堆会被 Alice 拿走,最小的一堆会被 Bob 拿走,剩下的一堆(也就是第二大的)归我们。

为了最大化我们获得的硬币数,我们应该确保在每次选择中,我们拿到的都是当前可选的三堆里第二大的那一堆。同时,为了让这个第二大的尽可能大,我们应该让 Bob 拿走的那一堆尽可能小。

基于这个贪心策略,我们可以:

  1. 将所有硬币堆 piles 从小到大排序。
  2. 排序后,最大的硬币堆在数组末尾,最小的在数组开头。
  3. 模拟选择过程:
    • Alice 总是拿走当前剩下的最大堆(数组末尾)。
    • 我们总是拿走当前剩下的第二大堆(数组次末尾)。
    • Bob 总是拿走当前剩下的最小堆(数组开头)。
  4. 我们可以用三个指针(或索引)来模拟这个过程。或者更简单地,考虑排序后的数组 piles
    • piles[n-1] 归 Alice。
    • piles[n-2] 归我们。
    • piles[0] 归 Bob。
    • 下一轮:piles[n-3] 归 Alice,piles[n-4] 归我们,piles[1] 归 Bob。
    • 以此类推,我们总是获得索引为 n-2, n-4, n-6, ... 的硬币堆,直到我们选了 n/3 堆为止。

具体的实现可以用一个循环:让我们的指针 jn-2 开始,每次 j -= 2;让 Bob 的指针 k0 开始,每次 k++。循环条件是 j > k,确保我们的索引大于 Bob 的索引,表示还有足够的堆可供分配。

复杂度

  • 时间复杂度: O(N log N)

    主要开销在于对 piles 数组进行排序。遍历过程是 O(N)。

  • 空间复杂度: O(log N) or O(N)

    取决于排序算法使用的额外空间。如果只考虑我们自己使用的额外空间,可以认为是 O(1)。

Code

class Solution {
    public int maxCoins(int[] piles) {
        // 对硬币堆进行排序
        Arrays.sort(piles);
        int n = piles.length;
        int sum = 0;
        for (int j = n - 2, k = 0; k < n / 3; j -= 2, k++) {
            sum += piles[j];
        }
        return sum;
    }
}

3462. 提取至多 K 个元素的最大总和

题目

Problem 3462

思路

贪心

解题过程

题目要求从二维网格 grid 中提取最多 k 个元素,使得它们的总和最大。有一个限制条件:对于第 igrid[i],最多只能提取 limits[i] 个元素。

贪心策略是显而易见的:我们应该优先选择整个网格中数值最大的那些元素,但同时要遵守每行的提取数量限制。

实现步骤:

  1. 遍历 grid 的每一行 i
  2. 对于当前行 grid[i],找到其中数值最大的 limits[i] 个元素(如果该行元素不足 limits[i] 个,则取所有元素)。可以通过排序当前行,然后选取最大的 limits[i] 个来实现。
  3. 将从所有行中选出的这些“候选”元素收集到一个列表或数组(例如 nums)中。
  4. 对收集到的所有候选元素 nums 进行排序。
  5. 从排序后的 nums 中选取最大的 k 个元素(如果 nums 中的元素总数少于 k,则取所有元素)。
  6. 计算这 k 个(或更少)元素之和,即为最大总和。

注意:总和可能很大,需要使用 long 类型存储。

复杂度

  • 时间复杂度: O(R * C log C + T log T)
    1. 遍历每一行并排序:R 行,每行排序需要 O(C log C)。总计 O(R * C log C)。
    2. 收集元素:将 T 个元素放入 nums 数组,耗时 O(T)。
    3. nums 数组排序:数组大小为 T,排序需要 O(T log T)。
    4. 求和:取前 k 个元素求和,需要 O(k) 或 O(T) 时间。
      整体复杂度由行排序和最终排序决定。
  • 空间复杂度: O(T) or O(R * C)

    主要需要一个数组 nums 来存储所有选出的候选元素,其大小最多为 R * C

Code

class Solution {
    private int len = 0;
    
    public long maxSum(int[][] grid, int[] limits, int k) {
        int n = grid.length, m = grid[0].length;
        int size = n * m;
        int[] nums = new int[size];
        for (int i = 0; i < grid.length; i++) {
            getMaxValue(grid[i], nums, limits[i]);
        }
        Arrays.sort(nums);
        long sum = 0;
        while (k != 0) {
            sum += nums[size - 1];
            size--;
            k--;
        }
        return sum;
    }

    private void getMaxValue(int[] arr, int[] nums, int limit) {
        Arrays.sort(arr);
        for (int i = arr.length - 1; i >= 0 && limit > 0; i--) {
            nums[len++] = arr[i];
            limit--;
        }
    }
}

2226. 每个小孩最多能分到多少糖果(复习)

题目

Problem 2226

这是第二次写这道题了,写的还不错,就是在处理可以获得的糖果数时没有处理数据可能溢出的问题。
详情请见 每日算法-250410

Code

class Solution {
    public int maximumCandies(int[] candies, long k) {
        int left = 1, right = 10000001;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (check(candies, mid, k)) {
                // 够分
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return right;
    }

    private boolean check(int[] arr, int num, long k) {
        long sum = 0;
        for (int x : arr) {
            sum += x / num;
        }
        return sum >= k;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MATLAB第116期】基于MATLAB的NBRO-XGBoost的SHAP可解释回归模型(敏感性分析方法)

【MATLAB第116期】基于MATLAB的NBRO-XGBoost的SHAP可解释回归模型&#xff08;敏感性分析方法&#xff09; 引言 该文章实现了一个可解释的回归模型&#xff0c;使用NBRO-XGBoost&#xff08;方法可以替换&#xff0c;但是需要有一定的编程基础&#xff09;来预测特征输出。该…

微信公众号消息模板推送没有“详情“按钮?无法点击跳转

踩坑&#xff01;&#xff01;&#xff01;&#xff01;踩坑&#xff01;&#xff01;&#xff01;&#xff01;踩坑&#xff01;&#xff01;&#xff01;&#xff01; 如下 简单说下我的情况&#xff0c;按官方文档传参url了 、但就是看不到查看详情按钮 。如下 真凶&#x…

电动单座V型调节阀的“隐形守护者”——阀杆节流套如何解决高流速冲刷难题

电动单座V型调节阀的“隐形守护者”——阀杆节流套如何解决高流速冲刷难题&#xff1f; 在工业自动化控制中&#xff0c;电动单座V型调节阀因其精准的流量调节能力&#xff0c;成为石油、化工等领域的核心设备。然而&#xff0c;长期高流速工况下&#xff0c;阀芯与阀座的冲刷腐…

自动驾驶与机器人算法学习

自动驾驶与机器人算法学习 直播与学习途径 欢迎你的点赞关注~

【网络编程】TCP数据流套接字编程

目录 一. TCP API 二. TCP回显服务器-客户端 1. 服务器 2. 客户端 3. 服务端-客户端工作流程 4. 服务器优化 TCP数据流套接字编程是一种基于有连接协议的网络通信方式 一. TCP API 在TCP编程中&#xff0c;主要使用两个核心类ServerSocket 和 Socket ServerSocket Ser…

从零开始配置 Zabbix 数据库监控:MySQL 实战指南

Zabbix作为一款开源的分布式监控工具&#xff0c;在监控MySQL数据库方面具有显著优势&#xff0c;能够为数据库的稳定运行、性能优化和故障排查提供全面支持。以下是使用Zabbix监控MySQL数据库的配置。 一、安装 Zabbix Agent 和 MySQL 1. 安装 Zabbix Agent services:zabbix…

Java学习手册:RESTful API 设计原则

一、RESTful API 概述 REST&#xff08;Representational State Transfer&#xff09;即表述性状态转移&#xff0c;是一种软件架构风格&#xff0c;用于设计网络应用程序。RESTful API 是符合 REST 原则的 Web API&#xff0c;通过使用 HTTP 协议和标准方法&#xff08;GET、…

读一篇AI论文并理解——通过幻觉诱导优化缓解大型视觉语言模型中的幻觉

目录 论文介绍 标题 作者 Publish Date Time PDF文章下载地址 文章理解分析 &#x1f4c4; 中文摘要&#xff1a;《通过幻觉诱导优化缓解大型视觉语言模型中的幻觉》 &#x1f9e0; 论文核心动机 &#x1f680; 创新方法&#xff1a;HIO&#xff08;Hallucination-In…

IOT项目——物联网 GPS

GeoLinker - 物联网 GPS 可视化工具 项目来源制作引导 项目来源 [视频链接] https://youtu.be/vi_cIuxDpcA?sigMaOKv681bAirQF8 想要在任何地方追踪任何东西吗&#xff1f;在本视频中&#xff0c;我们将向您展示如何使用 ESP32 和 Neo-6M GPS 模块构建 GPS 跟踪器——这是一…

Java学习手册:HTTP 协议基础知识

一、HTTP 协议概述 HTTP&#xff08;HyperText Transfer Protocol&#xff09;即超文本传输协议&#xff0c;是用于从万维网&#xff08;WWW&#xff1a;World Wide Web &#xff09;服务器传输超文本到本地浏览器的传输协议。它是一个应用层协议&#xff0c;基于请求-响应模型…

【含文档+PPT+源码】基于微信小程序的健康饮食食谱推荐平台的设计与实现

课程目标&#xff1a; 教你从零开始部署运行项目&#xff0c;学习环境搭建、项目导入及部署&#xff0c;含项目源码、文档、数据库、软件等资料 课程简介&#xff1a; 本课程演示的是一款基于微信小程序的健康饮食食谱推荐平台的设计与实现&#xff0c;主要针对计算机相关专…

Redis 慢查询分析与优化

Redis 慢查询分析与优化 参考书籍 &#xff1a; https://weread.qq.com/web/reader/d5432be0813ab98b6g0133f5kd8232f00235d82c8d161fb2 以下从配置参数、耗时细分、分析工具、优化策略四个维度深入解析 Redis 慢查询问题&#xff0c;结合实战调优建议&#xff0c;帮助开发者…

使用达梦官方管理工具SQLark快速生成数据库ER图并导出

在数据库设计与开发中&#xff0c;实体-关系图&#xff08;ER 图&#xff09;作为数据建模的核心工具&#xff0c;能够直观呈现表结构、字段属性及表间关系&#xff0c;是团队沟通和文档维护的重要工具。然而&#xff0c;许多开发者在实际工作中常面临一个痛点&#xff1a;手动…

模型 替罪羊效应

系列文章分享模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。转嫁罪责于无辜&#xff0c;维系群体控制与稳定 1 替罪羊效应的应用 1.1 多品牌危机中的行业“背锅侠” 行业背景&#xff1a;食品行业爆发大规模安全危机&#xff0c;多家企业卷入某类食品重金属超标…

TapData × 梦加速计划 | 与 AI 共舞,TapData 携 AI Ready 实时数据平台亮相加速营,企业数据基础设施现代化

在实时跃动的数据节拍中&#xff0c;TapData 与 AI 共舞&#xff0c;踏出智能未来的新一步。 4月10日&#xff0c;由前海产业发展集团、深圳市前海梦工场、斑马星球科创加速平台等联合发起的「梦加速计划下一位独角兽营」正式启航。 本次加速营以“打造下一位独角兽企业”为目…

15.电感特性在EMC设计中的运用

电感特性在EMC设计中的运用 1. 共模电感与差模电感的差异2. 电感的高频等效特性![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b4dc000672af4dd69a528450eb42cf10.png)3. 电感在EMC设计中的使用注意事项3.1 LC滤波计算3.2 并联型多级浪涌防护的电感退耦 1. 共模电感…

uniapp Vue2升级到Vue3,并发布到微信小程序的快捷方法

目录 前言&#xff1a;升级项目的两种方式步骤一、新建项目 【选择-默认模版】二、修改-pages.json三、补充-缺少的文件四、修改-Main.js按照 [官方文档-vue2升级vue3迁移指南](https://uniapp.dcloud.net.cn/tutorial/migration-to-vue3.html) 修改 五、升级-uni-ui扩展组件的…

数据重构如何兼顾效率与性能稳定?zStorage 全闪存分布式存储的技术实践与实测数据

点击蓝字 关注我们 zStorage 作为数据库场景下的全闪存分布式存储&#xff0c;除了性能要好&#xff0c;更重要的是要在各种情况下都能保持“稳定”的好。一个高并发的交易型业务数据库&#xff0c;如果出现轻微的IO抖动&#xff0c;就可能造成数据库并发事务提交的排队&#x…

A2A + MCP:构建实用人工智能系统的超强组合

构建真正有效的连接型人工智能系统的挑战 如果你正在构建人工智能应用&#xff0c;这种情况可能听起来很熟悉&#xff1a; 你需要特定的人工智能能力来解决业务问题。你找到了完成每个单独任务的出色工具。但把所有东西连接在一起却占据了大部分开发时间&#xff0c;还创建了…

力扣每日打卡17 49. 字母异位词分组 (中等)

力扣 49. 字母异位词分组 中等 前言一、题目内容二、解题方法1. 哈希函数2.官方题解2.1 前言2.2 方法一&#xff1a;排序2.2 方法二&#xff1a;计数 前言 这是刷算法题的第十七天&#xff0c;用到的语言是JS 题目&#xff1a;力扣 49. 字母异位词分组 (中等) 一、题目内容 给…