算法习题-力扣446周赛题解

算法可以调度思维,让程序员的思维发散,找到更好的解决方案。

第一题:执行指令后的得分

题目:

给你两个数组:instructionsvalues,数组的长度均为 n。你需要根据以下规则模拟一个过程:

  • 从下标 i = 0 的第一个指令开始,初始得分为 0。

    • 如果 instructions[i]add:将 values[i] 加到你的得分中。移动到下一个指令 (i + 1)
    • 如果instructions[i]jump:移动到下标为 (i + values[i]) 的指令,但不修改你的得分。
  • 当以下任一情况发生时,过程会终止:
    越界(即 i < 0i >= n),或尝试再次执行已经执行过的指令。被重复访问的指令不会再次执行。返回过程结束时的得分

思路:

遍历一遍操作数,如果如果遇到的是add,就将得分加到自己的得分中。如果遇到的是jump,那末就将循环变量自增value-1,减 1 是因为下一次循环会增 1 ,刚好抵消。

代码实现

class Solution {public long calculateScore(String[] instructions, int[] values) {long ans = 0;for(int i = 0;i >= 0 && i < instructions.length;i++) {if("ok".equals(instructions[i])) break;String op = instructions[i];instructions[i] = "ok";if("add".equals(op)) {ans += values[i];}if("jump".equals(op)) {i += values[i]-1;}}return ans;}
}
第二题:非递减数组的最大长度

题目:

给你一个整数数组 nums。在一次操作中,你可以选择一个子数组,并将其替换为一个等于该子数组 最大值 的单个元素。返回经过零次或多次操作后,数组仍为 非递减 的情况下,数组 可能的最大长度

子数组 是数组中一个连续、非空 的元素序列。

思路:

根据题意,假设遇到数组中的第i项为 a i a_i ai 那末 a i a_i ai 后面所有比它小的项都会被替换为 a i a_i ai ,直到遇到下一个比它大的项,就会开启下一轮的新的替换。

比如:4 1 2 3 5 1 3,那末,第 1 项后所有比 4 小的数,都会被替换4 ,直到遇到 5 才会开启下一轮新的替换,因此,样例的答案为:2 (最后的数组为:[4,5])故,只需要记录最大的前一项即可。

代码实现

class Solution {public int maximumPossibleSize(int[] nums) {int ans = 1,t = nums[0];for(int i = 1;i < nums.length;i++)if(t <= nums[i]) {ans ++;t = nums[i];}return ans;}
}
第三题:求出数组的X值 I

题目:

给你一个由 整数组成的数组 nums,以及一个 整数 k。你可以对 nums 执行 一次 操作,该操作中可以移除任意 不重叠 的前缀和后缀,使得 nums 仍然 非空 。你需要找出 numsx 值,即在执行操作后,剩余元素的 乘积 除以 k 后的 余数x 的操作数量。返回一个大小为 k 的数组 result,其中 result[x] 表示对于 0 <= x <= k - 1numsx 值。数组的 前缀 指从数组起始位置开始到数组中任意位置的一段连续子数组。数组的 后缀 是指从数组中任意位置开始到数组末尾的一段连续子数组。

子数组 是数组中一段连续的元素序列。注意,在操作中选择的前缀和后缀可以是 空的

思路:

题目的意思其实就是找到一个子数组,使得子数组的乘积模k的每种情况的数量。可以设置f[i ,j]表示以第 i结尾的所有模 k 结果为 j 的所有子数组。因此,考虑 f[i-1 , j]项,设f[i,p] 项是f[i-1, j] 项转移而来的,因此 j 是前i-1项模 k 的结果,故,当包含第 i 项时,

j = ■ % k,此时,算上最后一项,p = (nums_i * ■) % k = (nums_i % k * ■ % k) % k = j * (nums_i % k) % k

因此,转移方程为:f[i,j * (nums_i % k) % k] += f[i-1, j]

最后,考虑刚开始时,f[i,nums_i % k] = 1 必定有一个。

代码实现

public class Solution {public long[] resultArray(int[] nums, int k) {long[] ans = new long[k];int[][] f = new int[nums.length+1][k];for(int i = 1;i < f.length;i++) {f[i][nums[i-1] % k] = 1;for(int j = 0;j < k;j++) {f[i][j * (nums[i-1] % k) % k] += f[i-1][j];}}// 最后只需要统计一遍即可for(int i = 1;i < f.length;i++) {for(int j = 0;j < k;j++) {ans[j] += f[i][j];}}return ans;}
}
第四题:求出数组的X值 II

这题对于我现有的情况来说,已经很难了,因此,只能通过80% ~ 90%,搜到的题解有些难以理解,等我后期再理解理解

题目:

给你一个由 整数组成的数组 nums,以及一个 整数 k。你可以对 nums 执行 一次 操作,该操作中可以移除任意 不重叠 的前缀和后缀,使得 nums 仍然 非空 。你需要找出 numsx 值,即在执行操作后,剩余元素的 乘积 除以 k 后的 余数x 的操作数量。返回一个大小为 k 的数组 result,其中 result[x] 表示对于 0 <= x <= k - 1numsx 值。数组的 前缀 指从数组起始位置开始到数组中任意位置的一段连续子数组。数组的 后缀 是指从数组中任意位置开始到数组末尾的一段连续子数组。

子数组 是数组中一段连续的元素序列。注意,在操作中选择的前缀和后缀可以是 空的

思路:

题目的意思实际就是,每次给一个下标(index) 和 替换的值(value),每次将数组中的下标为 index 的位置替换为 value,之后,给定一个起始下标(start) 和 值(x),找到从 start 开始,直到数组的末尾的所有前缀的乘积模 k 的值为 x 的前缀的个数,因此我直接通过暴力解法没有全对。

算法实现

class Solution {public int[] resultArray(int[] nums, int k, int[][] queries) {int[] ans = new int[queries.length];for(int i = 0;i < queries.length;i++) {int index = queries[i][0];int value = queries[i][1];int start = queries[i][2];int x = queries[i][3];nums[index] = value;long res = 1;int ans_t = 0;for(int j = start;j < nums.length;j++) {res = res * nums[j] % k;if(res % k == x) ans_t ++;}ans[i] = ans_t;}return ans;}
}

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

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

相关文章

Ubuntu下MySQL的安装

Ubuntu下MySQL的安装 1. 查看当前操作系统版本2. 添加MySQL APT源2.1 访问下载页面&#xff0c;并下载发布包2.2 执行安装指令2.3 安装MySQL 3. 查看MySQL状态4. 设置开机自启动 1. 查看当前操作系统版本 通过命令lsb_release -a查看&#xff1a; 2. 添加MySQL APT源 2.1 访问下…

航顺 芯片 开发记录 (一) 2025年4月27日19:23:32

芯片型号: HK32F030MF4P6 第一步:创建工程目录 inc :头文件目录 MDK-ARM : 工程根目录 (新建工程选择该目录) src :相关资源存放位置 官方函数库相关内容 官方函数库大致结构图 ├─HK32F030MLib ├─CMSIS │ ├─CM0 │ │ └─Core │ │ arm_common_table…

Python 数据可视化进阶:精准插入图表到指定 Excel 工作表

Python 数据可视化进阶&#xff1a;精准插入图表到指定 Excel 工作表 在处理数据的过程中&#xff0c;我们常常需要将生成的图表精准地插入到已存在数据的 Excel 文件的指定工作表中。借助 Python 的强大库组合&#xff0c;这一操作得以高效实现。以下是经过优化和注释补充的代…

集成方案 | Docusign + 甄零科技,赋能企业海外业务高效增长!

本文将详细介绍 Docusign 与甄零科技的集成步骤及其效果&#xff0c;并通过实际应用场景来展示 Docusign 的强大集成能力&#xff0c;以证明 Docusign 集成功能的高效性和实用性。 甄零科技是一家专注于数字化合同管理系统的 SaaS 解决方案提供商&#xff0c;致力于为企业打造“…

00-算法打卡-目录

1 数组 01-算法打卡-数组-二分查找-leetcode(704)-第一天-CSDN博客 02-算法打卡-数组-二分查找-leetcode(35)-第二天-CSDN博客 03-算法打卡-数组-二分查找-leetcode(34)-第三天_leetcode 34-CSDN博客 04-算法打卡-数组-二分查找-leetcode(69)-第四天-CSDN博客 05-算法打卡-数组…

剑指Offer(数据结构与算法面试题精讲)C++版——day21

剑指Offer&#xff08;数据结构与算法面试题精讲&#xff09;C版——day21 题目一&#xff1a;数据流的第k大数字题目二&#xff1a;出现频率最高的k个数字题目三&#xff1a;和最小的k个数对附录&#xff1a;源码gitee仓库 题目一&#xff1a;数据流的第k大数字 题目&#xff…

NCCL非阻塞non-blocking实现

NCCL (NVIDIA Collective Communications Library) 主要设计用于高性能的集体通信&#xff08;如all-reduce、broadcast等&#xff09;&#xff0c;但其核心函数默认是阻塞式的&#xff08;blocking&#xff09;&#xff0c;即函数返回时操作已完成。不过&#xff0c;你可以通过…

代码随想录算法训练营第60期第二十天打卡

大家好&#xff0c;今天我们继续进入二叉树的章节&#xff0c;二叉树章节应该已经过半了&#xff0c;大家再坚持一下&#xff0c;那么废话不多说&#xff0c;我们继续今天的内容。 第一题对应力扣编号为235的二叉搜索树的最近公共祖先 其实我们上次任务就接触过了二叉树的最近…

8.0 西门子PLC的S7通讯解析

PC与西门子PLC的S7通讯主要有如下几个步骤: 1. TCP的三次握手(由Socket对象自动完成) 2.发送访问请求:COTP 3. 交换通讯信息:setup Commnunication 一、发送访问请求:COTP 比如向PLC请求+以及PLC返回响应的一个实际例子如下: 发送PLC:----> 03 00 00 16 11 E0 …

Nacos-SpringBoot 配置无法自动刷新问题排查

背景 Nacos SpringBoot版本中&#xff0c;提供了NacosValue注解&#xff0c;支持控制台修改值时&#xff0c;自动刷新&#xff0c;但是今天遇见了无法自动刷新的问题。 环境 SpringBoot 2.2.x nacos-client&#xff1a;2.1.0 nacos-config-spring-boot-starter&#xff1a;0…

JAVA | 聚焦 OutOfMemoryError 异常

个人主页 文章专栏 在正文开始前&#xff0c;我想多说几句&#xff0c;也就是吐苦水吧…最近这段时间一直想写点东西&#xff0c;停下来反思思考一下。 心中万言&#xff0c;真正执笔时又不知先写些什么。通常这个时候&#xff0c;我都会随便写写&#xff0c;文风极像散文&…

基于开源技术体系的品牌赛道力重构:AI智能名片与S2B2C商城小程序源码驱动的品类创新机制研究

摘要&#xff1a;在数字经济与实体经济深度融合的背景下&#xff0c;品牌竞争已从单一产品力竞争转向生态化、技术化的赛道力竞争。本文以开源AI大模型、AI智能名片及S2B2C商城小程序源码为核心技术载体&#xff0c;构建"技术赋能-场景贯通-生态协同"三维分析框架&am…

【vue3】购物车实战:从状态管理到用户体验的全流程实现

在电商项目中&#xff0c;购物车是核心功能之一&#xff0c;需要兼顾数据一致性、用户体验和逻辑复杂度。 本文结合 Vue3 Pinia 技术栈&#xff0c;详细讲解如何实现一个高效且易用的购物车系统&#xff0c;重点剖析 添加购物车 和 头部购物车预览 的核心逻辑与实现细节。 一…

卡洛诗西餐厅,以“中式西餐”为核心战略

在餐饮市场的激烈竞争中&#xff0c;“本土化”是许多国际餐饮品牌难以跨越的鸿沟——要么因水土不服黯然退场&#xff0c;要么因过度妥协失去特色。然而&#xff0c;卡洛诗以“中式西餐”为核心战略&#xff0c;将西餐与国内饮食文化深度融合&#xff0c;不仅破解了西餐本土化…

28-29【动手学深度学习】批量归一化 + ResNet

1. 批量归一化 1.1 原理 当神经网络比较深的时候会发现&#xff1a;数据在下面&#xff0c;损失函数在上面&#xff0c;这样会出现什么问题&#xff1f; 正向传递的时候&#xff0c;数据是从下往上一步一步往上传递反向传递的时候&#xff0c;数据是从上面往下传递&#xff0…

【Linux网络】Http服务优化 - 增加请求后缀、状态码描述、重定向、自动跳转及注册多功能服务

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

AIGC(生成式AI)试用 32 -- AI做软件程序测试 3

总结之前的AI做程序测试过程&#xff0c;试图优化提问方式&#xff0c;整合完成的AI程序测试提问&#xff0c;探索更多可能的AI测试 AIGC&#xff08;生成式AI&#xff09;试用 30 -- AI做软件程序测试 1 AIGC&#xff08;生成式AI&#xff09;试用 31 -- AI做软件程序…

C语言实现迪杰斯特拉算法进行路径规划

使用C语言实现迪杰斯特拉算法进行路径规划 迪杰斯特拉算法是一种用于寻找加权图中最短路径的经典算法。它特别适合用于计算从一个起点到其他所有节点的最短路径&#xff0c;前提是图中的边权重为非负数。 一、迪杰斯特拉算法的基本原理 迪杰斯特拉算法的核心思想是“贪心法”…

引领印尼 Web3 变革:Mandala Chain 如何助力 1 亿用户迈向数字未来?

当前 Web3 的发展正处于关键转折点&#xff0c;行业亟需吸引新用户以推动 Web3 的真正大规模采用。然而&#xff0c;大规模采用面临着核心挑战&#xff1a;数据泄露风险、集中存储的安全漏洞、跨系统互操作性障碍&#xff0c;以及低效的服务访问等问题。如何才能真正突破这些瓶…

WebSocket是h5定义的,双向通信,节省资源,更好的及时通信

浏览器和服务器之间的通信更便利&#xff0c;比http的轮询等效率提高很多&#xff0c; WebSocket并不是权限的协议&#xff0c;而是利用http协议来建立连接 websocket必须由浏览器发起请求&#xff0c;协议是一个标准的http请求&#xff0c;格式如下 GET ws://example.com:3…