每日算法-250513

每日算法 - 2024-05-13

记录今天学习的算法题解。


2335. 装满杯子需要的最短总时长

题目

Problem Description

思路

贪心

这道题的关键在于每次操作尽可能多地减少杯子的数量。我们每次操作可以装一杯或两杯(不同类型)。为了最小化总时间,应该优先选择装两杯不同类型的水。

解题过程

问题的最优解受到两个因素的制约:

  1. 数量最多的那杯水:假设数量最多的水需要 max_val 杯。由于每次操作最多只能装一杯这种类型的水,所以我们至少需要 max_val 秒才能把这种水装完。这是一个时间的下限。
  2. 总水量:假设总水量为 total_sum = amount[0] + amount[1] + amount[2]。由于每次操作最多装两杯水,装完 total_sum 杯水至少需要 ceil(total_sum / 2) 秒。这里的 ceil 表示向上取整,因为如果总数是奇数,最后一次操作只能装一杯。在整数除法中,(total_sum + 1) / 2 可以实现向上取整的效果。这也是一个时间的下限。

最短的总时长必须同时满足这两个下限条件。因此,最终答案就是这两个下限中的较大值:max(max_val, (total_sum + 1) / 2)

可以证明,总是存在一种贪心策略(例如,每次都优先选择数量最多的两种水来装)可以达到这个下限。

复杂度

  • 时间复杂度: O ( 1 ) O(1) O(1)。只需要进行常数次的比较和算术运算。
  • 空间复杂度: O ( 1 ) O(1) O(1)。只需要常数级别的额外空间存储变量。

Code

class Solution {public int fillCups(int[] amount) {// 找到数量最多的杯子数int maxVal = 0;int totalSum = 0;for (int count : amount) {maxVal = Math.max(maxVal, count);totalSum += count;}int avgOps = (totalSum + 1) / 2; return Math.max(maxVal, avgOps);}
}

1753. 移除石子的最大得分

题目

Problem Description

思路

贪心

目标是最大化操作次数(每次操作得1分)。每次操作需要从两堆不同的非空石子堆中各取一个。为了尽可能多地进行操作,我们应该避免让某一堆石子过早地被单独剩下。因此,贪心策略是每次都选择当前石子数最多的两堆进行操作。

解题过程

为了方便分析,我们先对三堆石子的数量 a, b, c 进行排序,假设排序后为 min_val <= mid_val <= max_val

考虑贪心策略:每次都从最多的两堆(max_valmid_val)中取石子。

分析两种情况:

  1. max_val >= mid_val + min_val:
    在这种情况下,最大堆的石子数量大于等于另外两堆之和。我们可以将 mid_val 堆和 min_val 堆的石子完全与 max_val 堆配对消耗完。

  2. max_val < mid_val + min_val:
    在这种情况下,最大堆的石子数不足以单独消耗掉另外两堆。这意味着我们可以持续地从最大的两堆中取石子,直到所有石子几乎被取完(最多只会剩下一个石子)。
    总石子数为 S = max_val + mid_val + min_val。每次操作减少2个石子。我们可以进行的操作次数取决于总石子数 S

    • 如果 S 是偶数,最多可以进行 S / 2 次操作,最后没有石子剩下。
    • 如果 S 是奇数,最多可以进行 (S - 1) / 2 次操作,最后会剩下1个石子。
      这两种情况合并起来就是 floor(S / 2) 次操作。在整数除法中,(max_val + mid_val + min_val) / 2 正好计算出 floor(S / 2)
      因此,最大得分为 (max_val + mid_val + min_val) / 2

综合这两种情况,即为题解。

复杂度

  • 时间复杂度: O ( 1 ) O(1) O(1)。对三个数排序(或找到最大、最小、中间值)以及后续计算都是常数时间。
  • 空间复杂度: O ( 1 ) O(1) O(1)。只需要常数级别的额外空间。

Code

class Solution {public int maximumScore(int a, int b, int c) {int max = Math.max(a, Math.max(b, c));int min = Math.min(a, Math.min(b, c));int mid = (a + b + c) - (max + min);if (max >= mid + min) {return mid + min;} else {return (max + mid + min) / 2;}}
}

2592. 最大化数组的伟大值(复习)

题目

Problem Description

这是第二次写这道题了,典型的田忌赛马问题,写的还不错,就不多说了,详细题解可以参考之前的笔记:每日算法-250428

Code

class Solution {public int maximizeGreatness(int[] nums) {int ret = 0;Arrays.sort(nums);int left = 0, right = nums.length - 1, i = right;while (left <= right) {if (nums[i] >= nums[right]) {left++;} else {ret++;right--;}i--;}return ret;}
}

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

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

相关文章

城市生命线综合管控系统解决方案-守护城市生命线安全

一、政策背景 国务院办公厅《城市安全风险综合监测预警平台建设指南》‌要求&#xff1a;将燃气、供水、排水、桥梁、热力、综合管廊等纳入城市生命线监测体系&#xff0c;建立"能监测、会预警、快处置"的智慧化防控机制。住建部‌《"十四五"全国城市基础…

分布式AI推理的成功之道

随着AI模型逐渐成为企业运营的核心支柱&#xff0c;实时推理已成为推动这一转型的关键引擎。市场对即时、可决策的AI洞察需求激增&#xff0c;而AI代理——正迅速成为推理技术的前沿——即将迎来爆发式普及。德勤预测&#xff0c;到2027年&#xff0c;超半数采用生成式AI的企业…

auto.js面试题及答案

以下是常见的 Auto.js 面试题及参考答案&#xff0c;涵盖基础知识、脚本编写、运行机制、权限、安全等方面&#xff0c;适合开发岗位的技术面试准备&#xff1a; 一、基础类问题 什么是 Auto.js&#xff1f;它的主要用途是什么&#xff1f; 答案&#xff1a; Auto.js 是一个…

C语言中的指定初始化器

什么是指定初始化器? C99标准引入了一种更灵活、直观的初始化语法——指定初始化器(designated initializer), 可以在初始化列表中直接引用结构体或联合体成员名称的语法。通过这种方式,我们可以跳过某些不需要初始化的成员,并且可以以任意顺序对特定成员进行初始化。这…

高德地图在Vue3中的使用方法

1.地图初始化 容器创建&#xff1a;通过 <div> 标签定义地图挂载点。 <div id"container" style"height: 300px; width: 100%; margin-top: 10px;"></div> 密钥配置&#xff1a;绑定高德地图安全密钥&#xff0c;确保 API 合法调用。 参…

RabbitMQ发布订阅模式深度解析与实践指南

目录 RabbitMQ发布订阅模式深度解析与实践指南1. 发布订阅模式核心原理1.1 消息分发模型1.2 核心组件对比 2. 交换机类型详解2.1 交换机类型矩阵2.2 消息生命周期 3. 案例分析与实现案例1&#xff1a;基础广播消息系统案例2&#xff1a;分级日志处理系统案例3&#xff1a;分布式…

中小型培训机构都用什么教务管理系统?

在教育培训行业快速发展的今天&#xff0c;中小型培训机构面临着学员管理复杂、课程体系多样化、教学效果难以量化等挑战。一个高效的教务管理系统已成为机构运营的核心支撑。本文将深入分析当前市场上适用于中小型培训机构的教务管理系统&#xff0c;重点介绍爱耕云这一专业解…

C++虚函数食用笔记

虚函数定义与作用&#xff1a; virtual关键字声明虚函数&#xff0c;虚函数可被派生类override(保证返回类型与参数列表&#xff0c;名字均相同&#xff09;&#xff0c;从而通过基类指针调用时&#xff0c;实现多态的功能 virtual关键字: 将函数声明为虚函数 override关键…

运算放大器相关的电路

1运算放大器介绍 解释&#xff1a;运算放大器本质就是一个放大倍数很大的元件&#xff0c;就如上图公式所示 Vp和Vn相差很小但是放大后输出还是会很大。 运算放大器不止上面的三个引脚&#xff0c;他需要独立供电&#xff1b; 如图比较器&#xff1a; 解释&#xff1a;Vp&…

华为OD机试真题——通信系统策略调度(用户调度问题)(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

Ubuntu 系统默认已安装 python,此处只需添加一个超链接即可

步骤 1&#xff1a;确认 Python 3 的安装路径 查看当前 Python 3 的路径&#xff1a; which python3 输出类似&#xff1a; /usr/bin/python3 步骤 2&#xff1a;创建符号链接 使用 ln -s 创建符号链接&#xff0c;将 python 指向 python3&#xff1a; sudo ln -s /usr/b…

深度学习-分布式训练机制

1、分布式训练时&#xff0c;包括train.py的全部的代码都会在每个gpu上运行吗&#xff1f; 在分布式训练&#xff08;如使用 PyTorch 的 DistributedDataParallel&#xff0c;DDP&#xff09;时&#xff0c;每个 GPU 上运行的进程会执行 train.py 的全部代码&#xff0c;但通过…

yarn的介绍

### Yarn 的基本概念 Yarn 是 Hadoop 生态系统中的一个重要组成部分&#xff0c;它是一种分布式资源管理框架&#xff0c;旨在为大规模数据处理提供高效的资源管理和调度能力。以下是关于 Yarn 的一些核心概念&#xff1a; #### 1. **Yarn 的定义** Yarn 是一个资源调度平台&a…

Spring-messaging-MessageHandler接口实现类ServiceActivatingHandler

ServiceActivatingHandler实现了MessageHandler接口&#xff0c;所以它是一个MessageHandler&#xff0c;在spring-integration中&#xff0c;它也叫做服务激活器&#xff08;Service Activitor&#xff09;&#xff0c;因为这个类是依赖spring容器BeanFactory的&#xff0c;所…

快速入门深度学习系列(2)----损失函数、逻辑回归、向量化

针对深度学习入门新手目标不明确 知识体系杂乱的问题 拟开启快速入门深度学习系列文章的创作 旨在帮助大家快速的入门深度学习 写在前面&#xff1a; 本系列按照吴恩达系列课程顺序发布(说明一下为什么不直接看原笔记 因为内容太多 没有大量时间去阅读 所有作者需要一次梳理…

KingBase问题篇

安装环境 操作系统&#xff1a;CentOS7 CPU&#xff1a;X86_64架构 数据库&#xff1a;KingbaseES_V008R006C009B0014_Lin64_install.iso 项目中遇到的问题 Q1. 执行sql中有字符串常量&#xff0c;且用双引号包裹&#xff0c;执行报错 A1. 默认KingBase不认双引号&#xff0…

濒危仙草的重生叙事:九仙尊米斛花节如何以雅集重构中医药文化IP

五月的霍山深处,层峦叠翠之间,中华仙草霍山米斛迎来一年一度的花期。九仙尊以“斛韵雅集,春野茶会”为主题,举办为期半月的米斛花文化节,融合中医药文化、东方美学与自然体验,打造一场跨越古今的沉浸式文化盛宴。活动涵盖古琴雅集、书法创作、茶道冥想、诗歌吟诵、民族歌舞等多…

LeetCode100.1 两数之和

今天晚上看了许多关于未来计算机就业的视频&#xff0c;有种正被贩卖焦虑的感觉&#xff0c;翻来覆去下决定先做一遍leetcode100给自己降降温&#xff0c;打算每周做四题&#xff0c;尽量尝试不同的方法与不同的语言。 一开始想到的是暴力解法&#xff0c;两层循环。数据量为1e…

python制造一个报错

以下是用Python制造常见错误的示例及解析&#xff0c;涵盖不同错误类型&#xff0c;便于理解调试原理&#xff1a; 一、语法错误 (SyntaxError) # 错误1&#xff1a;缺少冒号 if Trueprint("这行不会执行")# 错误2&#xff1a;缩进错误 def func(): print("未对…

idea整合maven环境配置

idea整合maven 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是springboot的使用。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性。【帮帮志系列文章】&#xff1a;每个知识点&#xff0c;都是写出代码…