【算法】【dp】最长子序列问题-使数组K递增的最少操作次数

news/2025/3/28 14:18:16/文章来源:https://www.cnblogs.com/cutter-point/p/18784860

package com.algorithm.level2.dp.lis;// 使数组K递增的最少操作次数
// 给你一个下标从0开始包含n个正整数的数组arr,和一个正整数k
// 如果对于每个满足 k <= i <= n-1 的下标 i
// 都有 arr[i-k] <= arr[i] ,那么称 arr 是K递增的
// 每一次操作中,你可以选择一个下标i并将arr[i]改成任意正整数
// 请你返回对于给定的 k ,使数组变成K递增的最少操作次数
// 测试链接 : https://leetcode.cn/problems/minimum-operations-to-make-the-array-k-increasing/
public class Level2_DP_LIS_003_MinimumOperationsToMakeArraykIncreasing {public static int MAXN = 100001;public static int[] nums = new int[MAXN];public static int[] ends = new int[MAXN];public static int kIncreasing(int[] arr, int k) {int n = arr.length;int ans = 0;// 如果对于每个满足 k <= i <= n-1 的下标 i ,都有 arr[i-k] <= arr[i] ,那么我们称 arr 是 K 递增 的。// 这里是对每个满足的i,i是变量,i不是从0开始的,注意for (int i = 0, size; i < k; i++) {size = 0;// 把每一组的数字放入容器// 将数组按索引模 k 分成 k 组,每组包含从索引 i, i+k, i+2k, ... 的元素。// 按索引模 k 分组的原因是题目要求每组内的元素形成一个不下降子序列// 分组后,每组的元素在原数组中是间隔开的(每隔 k 个元素),因此它们之间没有顺序约束。for (int j = i; j < n; j += k) {nums[size++] = arr[j];}// 当前组长度 - 当前组最长不下降子序列长度 = 当前组至少需要修改的数字个数// 对于每组,调用 lengthOfNoDecreasing 函数计算该组的 LIS 长度。// 统计需要修改的元素个数 :// 每组中需要修改的元素个数 = 组的总长度 - LIS 长度。// 累加所有组的结果。ans += size - lengthOfNoDecreasing(size);}return ans;}// nums[0...size-1]中的最长不下降子序列长度,计算最长不下降子序列(LIS)public static int lengthOfNoDecreasing(int size) {int len = 0;for (int i = 0, find; i < size; i++) {// 二分查找find = bs(len, nums[i]);if (find == -1) {ends[len++] = nums[i];} else {ends[find] = nums[i];}}return len;}public static int bs(int len, int num) {int l = 0, r = len - 1, m, ans = -1;while (l <= r) {m = (l + r) / 2;if (num < ends[m]) {ans = m;r = m - 1;} else {l = m + 1;}}return ans;}}

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

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

相关文章

从《黑神话:悟空》看项目管理的关键策略与突破点

《黑神话:悟空》的火爆,凸显了游戏项目管理的重要性。当下游戏行业竞争激烈,面临着诸多挑战。而日事清凭借支持敏捷管理、需求与任务管理、BUG管理、多项目并行处理、知识沉淀,以及项目统计与考核等一系列功能,助力游戏研发团队实现高效协作,推动敏捷开发。8月20日上午10…

边缘检测及Canny算法

对边缘的直观理解边缘有助于我们对图像进行语义理解。直观上,边缘发生在图像强度值变化剧烈的地方 如何描述变化?自然是用导数/梯度如上图,我们对图中的信号在水平方向上求导,可以得到右侧的导数图像,可以看到,它在边缘处由于信号发生剧烈变化,导数产生了极值。因此,导…

​工贸一体企业全链路管理应用实例:业务流程优化+任务智能分配+项目进度追踪

河源集品科技主营小型家电出口,自主研发实力强。发展中项目管理遇难题,试用多款工具无果。经对比,选用日事清。其功能全面,匹配公司流程、绩效等管理需求,能一键发起流程、自动流转待办,性价比高。针对订单、生产流程、多部门协作挑战,日事清给出对应方案,试用效果出色…

如何使用FPGA开发

介绍 与传统的微控制器相比,FPGA(现场可编程门阵列)是独一无二的,因为它们不执行顺序指令。相反,它们由一组可配置的逻辑块组成,这些逻辑块可以被重新编程以执行自定义的数字逻辑功能。这使得FPGA可以并行执行多个操作,使其在信号处理、数据处理和实时控制等特定任务中非常…

3月10号-3月16号笔记三合一+两篇面经

2025.3.10 学习 八股 blocked和waiting有啥区别 触发条件:线程进入BLOCKED状态通常是因为试图获取一个对象的锁(monitor lock),但该锁已经被另一个线程持有。这通常发生在尝试进入synchronized块或方法时,如果锁已被占用,则线程将被阻塞直到锁可用。线程进入WAITING状态是…

Dicom纯js的三维重建影像浏览器

主要功能介绍 实现通过浏览器浏览Dicom影像阅片。主要功能:支持标准DIcom影像的2D浏览,预设窗位,伪彩,序列间,序列内多种布局方式。 影像处理,提供影像翻图、缩放、移动、透镜、反相、旋转、截图等操作 影像测量,提供箭头、直线、十字架、角度、Cobb、心胸比、椭圆、矩形…

电子签借贷真实吗?315报道引发的行业地震!电子签到底冤不冤?

看了315的相关报道后,曝光套路贷本来是正向的,却将电子签和高利贷混为一谈。这种无意识的混淆不仅会误导大众,也不利于新兴技术的健康发展。电子签作为一种替代纸质合同签署的新兴技术,有着独特的优势和重要的意义。在过去,不同主体之间签订合同往往需要面对面进行签署,这…

C#反编译

偶遇C#逆向题,IDA拼尽全力无法战胜,只给我一团乱码。 这时可以使用dnSpy来反编译: https://github.com/dnSpy/dnSpy/releases/tag/v6.1.8 1.dnSpy使用方法: 将你要反编译的程序的整个文件夹拖到那里,似乎只有.dll那里才能看到源码, 例题:https://www.nssctf.cn/problem/3…

Windows11跳过Microsoft账户登录方法

新版Win11默认必须联网并且使用Microsoft账户登录,不然不能进去系统,以下是不联网进入方法1、在开机出现登录界面时,按下Ctrl+Shift+F3快捷键,然后系统会自动重启,重启 后会出现一个不需要登录Microsoft账户的启动界面,直接进入Windows11系统,系统中会弹窗,点确定。 2、…

android studio 真机wifi调试经验汇总

--------------- 2025/03/11 真机连接连不上wifi调试可能的原因: 1.手机没有开启开发者模式 2.手机没有开启usb调试以及wifi调试 3.手机应该改为传输文件模式 4.手机和电脑应该连接同一个wifi 5.在电脑cmd窗口输入adb connect ip:port(前提电脑需要配好adb环境)adb连接手机教…

广度优先搜索(BFS)走迷宫:

广度优先搜索(BFS)走迷宫: 广度优先搜索(BFS)是一种经典的图遍历算法,在解决路径查找、迷宫问题、拓扑排序等问题 前置知识:队列: 队列与栈类似,但是先进先出,而不是栈的先进后出。 原理: 相当于爆破,将所有的位置都走一遍 通用迷宫代码实现: #include <iostre…

TEA与XTEA算法:

TEA算法使用64位的明文分组和128位的密钥,它使用Feistel分组加密框架,需要进行 64 轮迭代,尽管作者认为 32 轮已经足够了。该算法使用了一个神秘常数δ作为倍数,它来源于黄金比率,以保证每一轮加密都不相同。但δ的精确值似乎并不重要,这里 TEA 把它定义为 δ=「(√5 - 1…