leetcode 801. Minimum Swaps To Make Sequences Increasing(变成升序列的最小交换次数)

NA400与昆仑通态MODBUS/TCP通讯调试说明 点击增加设备通道,弹出窗口进行设置,通道类型选择“0区输出继电器”,通道地址为1,通道个数为1,读写方式为读写。点击增加设备通道,弹出窗口进行设置,通道类型选择“4区输出寄存器”,数据类型选择“16位 无符号二进制”,通道地址为21001,通道个数为1,读写方式为读写。5.添加设备通道:双击莫迪康MODBUSTCP子设备,点击添加设备通道,根据Modbus规约地址表进行参数的设置,表格可在NAPro软件帮助中查看,如下图所示。然后可以在设备通道调试数据中观察到Q1的值为1,NW1的值678,表示通讯成功。 阅读详情

We have two integer sequences A and B of the same non-zero length.

We are allowed to swap elements A[i] and B[i]. Note that both elements are in the same index position in their respective sequences.

At the end of some number of swaps, A and B are both strictly increasing. (A sequence is strictly increasing if and only if A[0] < A[1] < A[2] < … < A[A.length - 1].)

Given A and B, return the minimum number of swaps to make both sequences strictly increasing. It is guaranteed that the given input always makes it possible.

Example:
Input: A = [1,3,5,4], B = [1,2,3,7]
Output: 1
Explanation:
Swap A[3] and B[3]. Then the sequences are:
A = [1, 3, 5, 7] and B = [1, 2, 3, 4]
which are both strictly increasing.
Note:

A, B are arrays with the same length, and that length will be in the range [1, 1000].
A[i], B[i] are integer values in the range [0, 2000].

给出A,B两个数组,可以交换相同的i 位数字,使得A和B都变成单调升序列。

思路:
和714.买卖股票收手续费的DP有点像,也是准备两个DP数组。一个是交换的情况,一个是keep的情况。

因为一个序列的一段,比如A=[3,5] 和B=[2, 3],可以选择保持不动,就这样A,B都是升序的,也可以交换,但是交换了第一位就要交换第二位。
这时有两个DP数组,keep和swap,keep[i] 和 swap[i]都保存交换的次数。
keep[0]不交换, 所以keep[0] = 0, swap[0]表示交换第0位,swap[0]=1

然后看i = 1,因为A[1] > A[0] 且 B[1] > B[0],就表示A和B已经都是升序的,那么不交换也可以,keep[i] = keep[i-1],表示i-1, i都不交换
swap[1]表示要交换A[1], B[1],那么就必须同时交换A[0]和B[0],所以swap[i] = swap[i-1]+1, 表示i-1, i都交换

如果出现A = [5,4], B = [3,7](example中最后一段),那上面的已经是升序的条件就不满足,如果想让交换一位后满足升序的条件,就必须满足A[i] > B[i-1] && B[i] > A[i-1],那么无论是交换A[i], B[i],还是交换A[i-1], B[i-1],交换后A和B都会是升序的。
这种情况下两种情况,1.交换A[i], B[i],那么就是i-1步不变,因此swap[i] = min(swap[i], keep[i-1] + 1)
2.交换A[i-1], B[i-1], 那么第i步不变,keep[i] = min(keep[i], swap[i-1])

keep[i]简言之就是想要保持第 i 位不变,同时满足A,B都是升序。要么A,B已经是升序,即保持keep[i];要么前面i-1位已经做了变换,使A,B变成升序,即swap[i-1],这两者取较小。

同理swap[i]就是第 i 位要交换,可以第i-1位不交换,只交换第i位,即keep[i-1] + 1;也可以i-1位也换,i位也换,即swap[i-1]+1(这一步是已经满足升序条件时就算出的)。两者取较小。

    public int minSwap(int[] A, int[] B) {
        if(A == null || B == null || A.length <= 1) {
            return 0;
        }
        
        int n = A.length;
        int[] keep = new int[n];
        int[] swap = new int[n];
        
        Arrays.fill(keep, Integer.MAX_VALUE);
        Arrays.fill(swap, Integer.MAX_VALUE);
        
        keep[0] = 0;
        swap[0] = 1;
        
        for(int i = 1; i < n; i++) {
            //不需要交换的情况
            if(A[i] > A[i-1] && B[i] > B[i-1]) {
                keep[i] = keep[i-1];  //不交换的情况
                swap[i] = swap[i-1] + 1;  //i-1交换的话,i也要交换
            }
            
            //要交换且交换后是升序的情况
            if(B[i] > A[i-1] && A[i] > B[i-1]) {
                keep[i] = Math.min(keep[i], swap[i-1]);
                swap[i] = Math.min(swap[i], keep[i-1] + 1);
            }
        }
        return Math.min(keep[n-1], swap[n-1]);
    }
C++经典面试题100例及答案 答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。答:这样可以提高编译效率,因为分开的话只需要编译一次生成对应的.obj文件后,再次应用该类的地方,这个类就不会被再次编译,从而大大的提高了编译效率。答:这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。答:常对象是指在任何场合都不能对其成员的值进行修改的对象。答:所谓的回调函数,就是预先在系统的对函数进行注册,让系统知道这个函数的存在,以后,当某个事件发生时,再调用这个函数对事件进行响应。 阅读详情

相关推荐

基于Claude AI的Dex个人操作系统:从零部署到高效工作流实战

在当今信息过载的时代,个人知识管理(PKM)和任务自动化成为提升效率的关键技术。传统PKM工具如Notion、Obsidian虽然提供了强大的信息存储能力,但本质上是被动的数据库,需要用户手动维护结构和链接,容易形成信息孤岛。其核心原理在于通过预设的文件夹结构和智能路由,实现信息的自动归类与关联。这种自动化同步机制的技术价值在于彻底消除重复劳动和决策疲劳,让用户从繁琐的信息整理中解放出来,专注于高价值思考。在实际应用场景中,它尤其适合需要处理大量会议、任务和人际关系的知识工作者,如产品经理、项目经理和团队领

weixin_42521558的博客 378

Minimum Swaps To Make Sequences Increasing:交换元素变为升序

We have two integer sequences A and B of the same non-zero length.We are allowed to swap elements A[i] and B[i]. Note that both elements are in the same index position in their respective sequences.At...

小雄鹿的博客 318

西南交通大学车辆工程专业大四上车辆综合实训ame仿真部分

西南交通大学车辆工程专业大四上车辆综合实训ame仿真建模部分

qq_64814052的博客 1245

leetcode801. Minimum Swaps To Make Sequences Increasing(python)

leetcode801. Minimum Swaps To Make Sequences Increasing(python) 原题地址:https://leetcode.com/problems/minimum-swaps-to-make-sequences-increasing/ 题目 We have two integer sequences A and B of the same...

birdreamer的博客 970

一体化伺服电机与施耐德PLC TM241CEC24T在Canopen协议下的应用

一.硬件组成 软件组成:施耐德SoMachineV4.3二.○1.打开SoMachineV4.3,点击“新建项目”○2.点击“空白项目”○3.项目命名○4.点击“创建项目” 三. 点击“Logic Builder” 四. ○1.右击项目”PMM_CANOPEN_ST”添加设备○2.点击”LogicController”选择PLC型号TM241CEC24T/U○3.点击“添加设备” 五. ○1.右击CAN_1,添加设备○2.选择“CANopen Perfomance”○3.点击“添加设备”

m0_46512607的博客 2521

S型速度曲线进阶:基于Sin²(x)的PLC平滑运动控制实践(以伺服/步进系统为例)

本文深入探讨了基于Sin²(x)的S型速度曲线在PLC平滑运动控制中的实践应用,特别针对伺服/步进系统。通过对比传统梯形曲线和七段S曲线,详细展示了Sin²(x)曲线在加速度连续性、计算效率和参数自适应性方面的优势,并结合博图平台的具体实现技巧和实战案例,为精密运动控制提供了优化方案。

weixin_28718793的博客 242

求将序列变成严格上升序列的最少操作次数

https://vjudge.net/contest/382451#problem/E 解题思路: 求将序列变成严格上升序列的最少操作次数,考虑 i < j ,则有a[j] - a[i] >= j - i , a[i]-i <= a[j]-j ,即等价于求 a[x]-x 的非严格上升序列的最少操作次数(POJ3666,参考博客链接: link); dp[i][j]表示第i个数变为排序后的第j个数(b[j])所需要的最少操作次数,则dp[i][j]=min (dp[i-1][k])+abs(

weixin_45826833的博客 2002

用MSBlock重塑C2f,让你的模型又轻又强(参数量与精度的双重突破)

打开确保模型解析器能识别MSBlock模块。通过将MSBlock集成到YOLOv8的C2f模块中,我们实现了一个“轻量且多尺度感知”的目标检测模型。这个改进不仅在工程上能降低部署成本、提升推理速度,更在科研上提供了“多尺度+动态核”的创新思路——这种思路可以延伸到其他网络(如ResNet、MobileNet)的改进中,帮你在论文中打造独特的研究点。如果你在实现过程中遇到问题,比如代码报错、训练收敛异常,可以先检查模块集成的每一步是否到位,再尝试调整MSBlock的卷积核尺寸、动态权重的计算方式等超参数。

m0_71589036的博客 105

【Lintcode】1016. Minimum Swaps To Make Sequences Increasing

题目地址: https://www.lintcode.com/problem/1016 给定两个长度相等的数组AAA和BBB,其长度都是nnn。对于任意iii,允许交换A[i]A[i]A[i]和B[i]B[i]B[i],使得两个数组都严格递增。问最少要交换多少次。题目保证解存在。 思路是动态规划。设f[i]f[i]f[i]是不交换A[i]A[i]A[i]和B[i]B[i]B[i]的满足条件的最小交换次数,g[i]g[i]g[i]是交换A[i]A[i]A[i]和B[i]B[i]B[i]的满足条件的最小交换次数

数学、算法爱好者的博客 199

【100%通过率】华为od机试C卷【部门人力分配】Python 实现

当前部门需要完成 N 个需求,需求用 requirements[i] 表示,requirements[i] 表示第 i 个需求的工作量大小,单位:人月。2:明显这个人力需求值有上下限的情况下【下限为requirements中的最大值,上限为requirements中的最大两个值相加(因为最多有两个需求同一个月开发)】,可以考虑使用二分法。当选择人力为6时,2个需求量为3的工作可以在1个月里完成,其他2个工作各需要1个月完成。当选择人力为5时,4个工作各需要1个月完成,一共需要4个月才能完成所有需求。

MISAYAONE的博客 2020

第14.7章 高翔博士最新开源框架Lightning-LM源码解读(七):PoseExtrapolator模块深度剖析,揭秘激光SLAM高频位姿外推核心技术

PoseExtrapolator是Lightning-LM框架中负责高频位姿外推的核心模块,通过融合DR(航位推算)、激光里程计和PGO(位姿图优化)数据实现精准实时定位。模块初始化依赖PGO数据,后续通过DR数据进行高频位姿更新,并利用PGO结果进行误差补偿。关键函数AddDRLocAndExtrapolate处理DR增量位姿,结合速度补偿机制逐步修正误差,保证高频输出的同时提升精度。该模块体现了多传感器融合思想,通过互补性数据(高频DR与低频高精PGO)实现鲁棒定位,代码中使用了SE3位姿表示、互斥锁保

行知SLAM 348

Leetcode 801. 使序列递增的最小交换次数

Leetcode 801. 使序列递增的最小交换次数

li_yizhixiaowukong的博客 831

【CANdelaStudio编辑CDD】-1.2-给$10服务SessionControl创建一个新Session会话并修改Session state machine会话状态机(UDS诊断)

前一篇:【UDS诊断描述文件CDD】-1.1-ISO_14229中$10服务理论部分https://blog.csdn.net/qfmzhu/article/details/120375515案例背景: 在CDD中如何给$10服务创建一个新的Session会话; 在CDD中如何给$10服务修改Session state machine会话状态机。 目录 1 查看$10服务中已有的Session会话​ 2 查看$10服务中已有的Session state machine会话状态机 3 在$10...

「汽车电子助手」的博客 6077

LeetCode #801. Minimum Swaps To Make Sequences Increasing

题目描述: We have two integer sequencesAandBof the same non-zero length. We are allowed to swap elementsA[i]andB[i]. Note that both elements are in the same index position in their respective se...

LawFile的博客 160

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

leetcode 801.Minimum Swaps To Make Sequences Increasing

链接:https://leetcode.com/contest/weekly-contest-76/problems/minimum-swaps-to-make-sequences-increasing/题意:给两个等长度数组,问交换最少次数使两个数组都变为升序,最少几次?思路:很明显的动规,就是分类麻烦一点点,就是强怼。 针对i和i+1位置有两种情况: 两个数组都已经满足升序,即A[i]cla

qq_33688997的博客 604

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Leetcode 801. Minimum Swaps To Make Sequences Increasing [Python]

设置两个DP数字,keep和swap, keep 表示,当前位置不交换,总共最少的操作次数,swap表示,当前位置交换,则总共最少的操作次数。 class Solution: def minSwap(self, A: List[int], B: List[int]) -> int: N = len(A) keep = [float('inf') for _ in range(N)] #if the we keep the element at position

sinat_30403031的博客 262

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Leetcode 801:使序列递增的最小交换次数(超详细的解法!!!)

我们有两个长度相等且不为空的整型数组A和B。 我们可以交换A[i]和B[i]的元素。注意这两个元素在各自的序列中应该处于相同的位置。 在交换过一些元素之后,数组A和B都应该是严格递增的(数组严格递增的条件仅为A[0] < A[1] < A[2] < ... < A[A.length - 1])。 给定数组A和B,请返回使得两个数组均保持严格递增状态的最小交换次数。假设给定的...

coordinate的博客 2692

LeetCode 801 使序列递增的最小交换次数[动态规划] HERODING的LeetCode之路

【代码】LeetCode 801 使序列递增的最小交换次数[动态规划] HERODING的LeetCode之路。

HERODING23的博客 298

图解LeetCode——801. 使序列递增的最小交换次数(难度:困难)

【解释】 交换 A[3] 和 B[3] 后,两个数组如下:A = [1, 3, 5, 7] , B = [1, 2, 3, 4],两个数组均为严格递增的。【输入】 nums1 = [0,3,5,8,9], nums2 = [2,1,4,6,9]我们可以得出以下三种情况,并可以推断出对应的互换结论。【输入】 nums1 = [1,3,5,4], nums2 = [1,2,3,7]写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的。:只有两类值,0表示不交换;在一次操作中,我们可以交换。

爪哇缪斯的博客 630

801. Minimum Swaps To Make Sequences Increasing

文章目录1题目理解2 暴力搜索3 动态规划3.1第一种情况3.2第二种情况 1题目理解 输入:两个int数组A和B,长度都不为0,并且长度相同。 输出:最小交换次数。 规则:最终想要得到两个严格递增的数组。如果原始数组不符合要求,可以在相同的位置交换A、B数组元素。也就是说可以交换A[i]和B[i],使得数组严格递增。并且题目可以保证输入的数组是有效的数组。 例子: Input: A = [1,3,5,4], B = [1,2,3,7] Output: 1 Explanation: 交换 A[3] and

约定的博客 232

LeetCode·每日一题·801.使序列递增的最小交换次数·动态规划

动态规划

m0_64560763的博客 277

LeetCode-801.使序列递增的最小交换次数、动态规划的使用总结

我们有两个长度相等且不为空的整型数组 A 和 B 。我们可以交换 A[i] 和 B[i] 的元素。注意这两个元素在各自的序列中应该处于相同的位置。在交换过一些元素之后,数组 A 和 B 都应该是严格递增的(数组严格递增的条件仅为A[0] < A[1] < A[2] < … < A[A.length - 1])。给定数组 A 和 B ,请返回使得两个数组均保持严格递增状态的最小交换次数。假设给定的输入总是有效的。示例: 输入: A = [1,3,5,4], B = [1,2,3,7].

编程猿来如此 495

LeetCode801:使序列递增的最小交换次数

LeetCode801:使序列递增的最小交换次数

我先下了 602

LeetCode 801. 使序列递增的最小交换次数

动态规划

脚踏实地,仰望星空 286
上一篇: leetcode 813. Largest Sum of Averages(最大平均数)
下一篇: leetcode 698. Partition to K Equal Sum Subsets(分成K个相等和的子集)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值