每日算法-250417

news2025/5/19 21:56:27

每日算法 - 20250417

记录今天的算法学习过程,包含三道 LeetCode 题目。


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

题目

Problem Description

思路

贪心

解题过程

想要获得最大的数组和,我们的目标是尽可能地增大数组元素的总和。一种有效的贪心策略是:每次选择数组中绝对值最大负数进行取反。如果数组中没有负数了,或者 k 次操作还未用完,我们就应该选择数组中绝对值最小的数(此时必然是正数或0)进行反复取反,直到 k 次操作用尽。

为了方便找到最小值,我们可以先将数组排序。

  1. 对数组 nums 进行升序排序。
  2. 遍历排序后的数组,遇到负数 nums[i] 就将其取反 (nums[i] = -nums[i]),同时消耗一次操作 (k--)。继续这个过程直到 k 耗尽或者遍历完所有负数。
  3. 如果在完成上述步骤后 k 仍然大于 0:
    • 这意味着数组中所有的数现在都是非负数。
    • 为了最大化数组和,我们应该对数组中绝对值最小的元素执行剩下的取反操作。因为每次取反都会改变其符号,如果 k偶数,那么无论我们对哪个元素操作 k 次,最终结果都相当于没有操作(因为偶数次取反等于自身),数组和不变。如果 k奇数,那么最终结果相当于对绝对值最小的元素进行了一次取反操作。
    • 因此,如果 k 是奇数,我们需要再次对(可能已经改变了顺序的)数组进行排序,找到新的最小值 nums[0],并将其取反 (nums[0] = -nums[0])。如果 k 是偶数,则无需任何操作。
  4. 最后,计算整个数组的和并返回。

复杂度

  • 时间复杂度: O(N log N) - 主要由排序决定。如果 k 很大,排序可能需要执行两次。
  • 空间复杂度: O(log N) or O(N) - 取决于排序算法使用的栈空间或辅助空间。通常认为是 O(1) 的额外空间(不计输入输出和递归栈)。

Code

class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {
        Arrays.sort(nums);
        int i = 0;
        while (k != 0 && i < nums.length) {
            if (nums[i] > 0) {
                break;
            }
            nums[i] = -nums[i];
            i++;
            k--;
        }
        if (k % 2 != 0) {
            Arrays.sort(nums);
            nums[0] = -nums[0];
        }
        int sum = 0;
        for (int x : nums) {
            sum += x;
        }
        return sum;
    }
}

1833. 雪糕的最大数量

题目

Problem Description

思路

贪心

解题过程

想要用有限的钱 (coins) 买到尽可能多的雪糕,最直观的策略就是优先购买价格最低的雪糕。这是一种典型的贪心策略:局部最优(每次都买当前能买得起的最便宜的)可以导出全局最优(买到最多的雪糕数量)。

  1. 首先,将雪糕的价格数组 costs 从小到大排序。
  2. 然后,从价格最低的雪糕开始,依次尝试购买。维护一个计数器 ret 记录购买的数量。
  3. 遍历排序后的 costs 数组。对于当前的雪糕价格 costs[i]
    • 如果 coins >= costs[i],说明可以购买,那么就扣除相应的花费 (coins -= costs[i]),并将购买数量 ret 加一。
    • 如果 coins < costs[i],说明钱不够买当前及更贵的雪糕了,停止购买。
  4. 返回最终的购买数量 ret

复杂度

  • 时间复杂度: O(N log N) - 主要由排序决定。
  • 空间复杂度: O(log N) or O(N) - 取决于排序算法。通常认为是 O(1) 的额外空间。

Code

class Solution {
    public int maxIceCream(int[] arr, int coins) {
        Arrays.sort(arr);
        if (arr[0] > coins) {
            return 0;
        }
        int ret = 0;
        for (; ret < arr.length; ret++) {
            coins -= arr[ret];
            if (coins < 0) {
                return ret;
            }
        }
        return ret;
    }
}

1385. 两个数组间的距离值(复习)

题目

Problem Description

复习反思

这是第二次做这道题。这次在思考过程中,对于题目要求的理解出现了偏差:没有完全搞清楚“对于 arr1[i]只要 arr2 中存在任何一个元素 arr2[j] 满足 |arr1[i] - arr2[j]| <= d,那么 arr1[i] 就不满足距离值的要求”。这个关键点没弄明白,导致在考虑二分查找时不知道具体要查找的目标是什么,这是一个需要注意的错误。

实际上,只要理解了这一点——我们需要检查 arr2 中是否存在位于 [arr1[i] - d, arr1[i] + d] 区间内的元素——问题就清晰了。通过对 arr2 排序,我们可以使用二分查找来高效地判断这个区间内是否存在 arr2 的元素。

详细题解请见之前的笔记:每日算法-250407

Code

class Solution {
    public int findTheDistanceValue(int[] arr1, int[] arr2, int d) {
        Arrays.sort(arr2);
        int ret = 0, index = 0;
        for (int x : arr1) {
            index = check(arr2, x - d);
            if (index == arr2.length || arr2[index] > x + d) {
                ret++;
            }
        }
        return ret;
    }

    private int check(int[] arr, int t) {
        int left = 0, right = arr.length - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (arr[mid] < t) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return left;
    }
}

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

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

相关文章

16.4B参数仅激活2.8B!Kimi-VL-A3B开源:长文本、多模态、低成本的AI全能选手

近日&#xff0c;月之暗面&#xff08;Moonshot AI&#xff09;开源了Kimi-VL系列模型&#xff0c;包含Kimi-VL-A3B-Instruct&#xff08;指令调优版&#xff09;和Kimi-VL-A3B-Thinking&#xff08;推理增强版&#xff09;。这两款模型以总参数16.4B、激活参数仅2.8B的轻量化设…

山东大学软件学院创新项目实训开发日志(17)之中医知识历史问答历史对话查看功能完善

本次完善了历史对话的查看功能&#xff0c;可以让其正常显示标题 后端&#xff1a;在conversationDTO功能构造方法添加title 前端&#xff1a;在历时会话按钮添加标题title即可 前端效果展示&#xff0c;成功(&#xff3e;&#xff0d;&#xff3e;)V&#xff1a;

ZKmall开源商城静态资源管理:Nginx 配置与优化

ZKmall开源商城作为电商平台&#xff0c;其商品图片、前端资源等静态内容的高效管理与分发直接影响用户体验和系统性能。基于Nginx的静态资源管理方案&#xff0c;结合动静分离、缓存优化、安全加固、性能调优四大核心策略&#xff0c;可显著提升平台响应速度与稳定性。以下是具…

Google Gemini 系列AI模型 的详细解析,涵盖其技术特点、版本差异、应用场景及优势

以下是 Google Gemini 系列AI模型 的详细解析&#xff0c;涵盖其技术特点、版本差异、应用场景及优势&#xff1a; 1. Gemini 系列概述 发布背景&#xff1a; Google于2023年推出 Gemini 系列模型&#xff0c;作为其多模态大模型的里程碑&#xff0c;旨在结合文本、图像、音频…

量子通信应用:量子安全物联网(三)协议融合

第一部分:引言与概述 1.1 量子安全物联网的背景与必要性 随着物联网(IoT)设备的爆炸式增长(预计2030年全球连接设备超750亿台),传统安全机制(如RSA、ECC加密)正面临量子计算的颠覆性威胁。量子计算机的Shor算法可在多项式时间内破解非对称加密体系,而Grover算法则对…

鸿蒙API15 “一多开发”适配:解锁黄金三角法则,开启高效开发新旅程

一、引言 在万物互联的时代浪潮中&#xff0c;鸿蒙操作系统以其独特的 “一多开发” 理念&#xff0c;为开发者打开了一扇通往全场景应用开发的新大门。“一多开发”&#xff0c;即一次开发&#xff0c;多端部署 &#xff0c;旨在让开发者通过一套代码工程&#xff0c;就能高效…

驱动-自旋锁

前面原子操作进行了讲解&#xff0c; 并使用原子整形操作对并发与竞争实验进行了改进&#xff0c;但是原子操作只能对整形变量或者位进行保护&#xff0c; 而对于结构体或者其他类型的共享资源&#xff0c; 原子操作就力不从心了&#xff0c; 这时候就轮到自旋锁的出场了。 两个…

10.(vue3.x+vite)div实现tooltip功能(css实现)

1:效果截图 2:代码实现 <template><div><div class="tooltip" style="margin-top: 20%; margin-left: 20%; background-color: blueviolet; color: white;

Linux:进程:进程调度

进程在CPU上运行具有以下特性&#xff1a; 竞争、独⽴、并⾏、并发 竞争性:系统进程数⽬众多&#xff0c;⽽CPU资源很少甚至只有一个&#xff0c;所以进程之间是具有竞争属性的。为 了⾼效完成任务&#xff0c;更合理竞争相关资源&#xff0c;便具有了优先级 独⽴性: 为了避…

Stable Diffusion 图像生成 GUI 应用:图像缩放等五个优化——SD界面学习记录

本篇续前面Stable DiffusionPyqt5实现图像生成和管理界面&#xff0c;链接如下&#xff1a; Stable DiffusionPyqt5&#xff1a; 实现图像生成与管理界面&#xff08;带保存 历史记录 删除功能&#xff09;——我的实验记录&#xff08;结尾附系统效果图&#xff09;-CSDN博客…

职坐标解码互联网行业转型发展新动能

当前&#xff0c;互联网行业正以前所未有的速度重塑全球产业格局。工信部最新数据显示&#xff0c;我国互联网企业营收连续三年保持双位数增长&#xff0c;其中百强企业在人工智能、物联网等领域的投入强度同比提升40%&#xff0c;展现出强劲的技术引领力。与此同时&#xff0c…

【含文档+PPT+源码】基于微信小程序的非遗文化黄梅戏宣传平台的设计与实现

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

Causal Attention的底层原理

Causal Attention Transformer的Decoder中最显著的结构是Casual Attention。 通过本篇文章&#xff0c;你将学会 Casual Attention的机制原理 Casual Attention在TensorFlow中的实现原理 如何快速地保存并打印TensorFlow中模型已经训练好的参数 如何实现Transformer的Dec…

CyberAgentAILab 开源数字人项目TANGO,heygen的开源版来了~

简介 TANGO 是 CyberAgentAILab 开源的一项前沿研究成果&#xff0c;其初衷在于探索高效生成模型在实际应用场景中的表现。项目诞生于 CyberAgent 在整合创意与人工智能的实践中&#xff0c;旨在为数字内容生成、交互和实时渲染等领域提供一个高性能、模块化、可扩展的解决方案…

ROS ROS2 机器人深度相机激光雷达多传感器标定工具箱入门教程(一)

系列文章目录 目录 系列文章目录 前言 一、安装 1.1 ROS 2 官方软件包 二、教程 2.1 标定配置器 2.1.1 机器人选项 2.1.2.1 外参相机-激光雷达标定 2.1.2.2 外参激光雷达-激光雷达标定 2.1.2.3 外参相机参照标定 2.1.2.4 外参激光雷达-参考标定 2.2 外参照相机-激…

【HDFS入门】HDFS与Hadoop生态的深度集成:与YARN、MapReduce和Hive的协同工作原理

目录 引言 1 HDFS核心架构回顾 2 HDFS与YARN的集成 3 HDFS与MapReduce的协同 4 HDFS与Hive的集成 4.1 Hive架构与HDFS交互 4.2 Hive数据组织 4.3 Hive查询执行流程 5 HDFS在生态系统中的核心作用 6 性能优化实践 7 总结 引言 在大数据领域&#xff0c;Hadoop生态系统…

用 AI 十天开发小程序:探秘 “幸运塔塔屋” 之 “解惑指南书” 功能

在当今软件开发领域&#xff0c;AI 技术正以前所未有的速度改变着我们的开发方式。我仅用十天时间&#xff0c;借助 AI 成功开发出 “幸运塔塔屋” 小程序&#xff0c;其中 “解惑指南书” 功能别具一格。今天&#xff0c;就为大家详细剖析这个功能从构思到落地的全过程。 十天…

直流电源基本原理

整流电路 在构建整流电路时&#xff0c;要选择合适参数的二极管 If是二极管能够通过电流的能力&#xff0c;也是最大整流的平均电流。 还要考虑二极管的反向截至电压。 脉动系数电压交流幅值/直流平均电压&#xff08;越小越好&#xff09; 三相整流电路优点&#xff1a; …

osu ai 论文笔记 DQN

e https://theses.liacs.nl/pdf/2019-2020-SteeJvander.pdf Creating an AI for the Rhytm Game osu! 20年的论文 用监督学习训练移动模型100首歌能达到95准确率 点击模型用DQN两千首歌65准确率 V抖用的居然不是强化学习&#xff1f; 5,6星打96准确度还是有的东西的 这是5.…

MapReduce实验:分析和编写WordCount程序(对文本进行查重)

实验环境&#xff1a;已经部署好的Hadoop环境 Hadoop安装、配置与管理_centos hadoop安装-CSDN博客 实验目的&#xff1a;对输入文件统计单词频率 实验过程&#xff1a; 1、准备文件 test.txt文件&#xff0c;它是你需要准备的原始数据文件&#xff0c;存放在你的 Linux 系…