Leetcode-801. Minimum Swaps To Make Sequences Increasing 使序列递增的最小交换次数 (DP)

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

题目

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

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].

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.

思路及代码

DP
  • swap[i]表示第i位交换使得A[0]-A[i],B[0]-B[i]都是严格单调递增的最小交换次数
  • keep[i]表示第i位不交换使得A[0]-A[i],B[0]-B[i]都是严格单调递增的最小交换次数
  • 在考虑第i位是否交换时,看第i-1位和第i位的元素大小,分为多种情况
    • A[i-1] < A[i] and B[i-1] < B[i],表示原来就是符合条件的,所有如果第i-1位交换的话,第i位也要交换,即swap[i] = swap[i-1] + 1;如果第i-1位没有交换的话,第i位也保持不变即可,即keep[i] = keep[i-1]
    • A[i-1] < B[i] and B[i-1] < A[i]表述交换后可以符合单调递增的条件,这里分为两种可能
      • A=[2,8],B=[5,4],即必须要交换
        • swap[i] = keep[i-1] + 1
        • keep[i] = swap[i-1]
      • A=[2,5],B=[3,4],即交换与否都可以
        • 若交换,则同上一种情况一样
        • 若不交换,则之前已经考虑过了(A[i-1] < A[i] and B[i-1] < B[i])
        • 所以这两者取最小值即可
  • 返回swap和keep最终值的最小值即可
class Solution:
    def minSwap(self, A: List[int], B: List[int]) -> int:
        swap1, keep1 = 1, 0
        for i in range(1,len(A)):
            swap2 = keep2 = float("inf")
            if A[i-1] < A[i] and B[i-1] < B[i]:
                swap2 = swap1 + 1
                keep2 = keep1
            if A[i-1] < B[i] and B[i-1] < A[i]:
                swap2 = min(swap2, keep1 + 1)
                keep2 = min(keep2, swap1)
            swap1, keep1 = swap2, keep2
        return min(swap1, keep1)

复杂度

T = O(n)O(n)O(n)
S = O(1)O(1)O(1)

抖音视频数据抓取 最近经常有人问我抓取抖音视频的数据,问我一些很小白的问题,算法给他也不会用。 还是先抓包,获取需要的接口和参数,相关的算法在其它文章里面有描述。 搜索个视频看看 查看抓的包信息: 可以看到,这里是post请求... 阅读详情

相关推荐

机器学习算法 —— LightGBM

本次我们选择英雄联盟数据集进行LightGBM的场景体验。英雄联盟是2009年美国拳头游戏开发的MOBA竞技网游,在每局比赛中蓝队与红队在同一个地图进行作战,游戏的目标是破坏敌方队伍的防御塔,进而摧毁敌方的水晶枢纽,拿下比赛的胜利。现在共有9881场英雄联盟韩服钻石段位以上的排位比赛数据,数据提供了在十分钟时的游戏状态,包括击杀数、死亡数、金币数量、经验值、等级……参考项目:机器学习系列入门系列[七]:基于英雄联盟数据集的LightGBM的分类预测。

ZShiJ的博客 696

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

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

coordinate的博客 2674

R43_R43E_QMIEM106无线网卡驱动

明基笔记本驱动:R43_R43E_QMIEM106无线网卡驱动。

leetcode801. 使序列递增最小交换次数

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

六六先森的博客 5666

leetcode801.使序列递增最小交换次数

题目大意 我们有两个长度相等且不为空的整型数组 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 = [

大腿壮的博客 333

序列交换

链接:https://www.nowcoder.com/questionTerminal/f114f634de38401684edff5f841a95a2来源:牛客网牛牛有一个长度为n的整数序列s,羊羊要在牛牛的序列中选择不同的两个位置,然后交换两个位置上的元素。现在需要求出羊羊交换后可以得到的不同的序列个数。(注意被交换的两元素值可能相同)。 如序列{1, 47},输出1.羊羊必...

weixin_45798469的博客 429

[leetcode 801] Minimum Swaps To Make Sequences Increasing

801. Minimum Swaps To Make Sequences IncreasingWe 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...

泥瓦匠的专栏 476

801. Minimum Swaps To Make Sequences Increasing

801. Minimum Swaps To Make Sequences Increasing方法1: dynamic programming易错点:方法2: 降维 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]. No...

wilzxu的博客 328

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的博客 968

LeetCode 801Minimum 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 seque...

iCode_girl的博客 182

[leetcode] 801. Minimum Swaps To Make Sequences Increasing

Description 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 respectiv...

Learning from the mistakes 264

leetcode 801. 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 the end of some number of swaps, A and B are both st

蓝羽飞鸟的博客 181

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 sequences...

reigns的博客 258

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.A...

m0_37889928的博客 296

[Leetcode] 801. 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 respe

魔豆(Magicbean)的博客 1742

DP】个人练习-Leetcode-801. Minimum Swaps To Make Sequences Increasing

DP

Rstln的博客 362

LeetCode801. Minimum Swaps To Make Sequences Increasing 解题报告(Python

作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录题目描述题目大意解题方法动态规划参考资料日期 题目地址:https://leetcode.com/problems/minimum-swaps-to-make-sequences-increasing/description/ 题目描述 We have two integer se...

负雪明烛 1524

**Leetcode 801. Minimum Swaps To Make Sequences Increasing

https://leetcode.com/problems/minimum-swaps-to-make-sequences-increasing/description/dp[i][0]表示 在第i个位置 没有换 从0...i最小交换次数dp[i][1]表示 在第i个位置,交换了 从0...i最小交换次数class Solution { public: int minSwap(vector...

Pilgrim 327

leetcode801_Mininum_SwapMakesSequencesIncreasing

title: leetcode801_Mininum_SwapMakesSequencesIncreasing date: 2018-3-20 14:18:40 categories: - leetcode tags: - leetcode We have two integer sequences A and B of the same non-zero le...

coderlong的博客 955

[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 sequences...

weixin_30371469的博客 129

转:DP总结

在这里插入图片描述

qq_19450921的博客 124
上一篇: Leetcode-790. Domino and Tromino Tiling 多米诺和托米诺平铺 (DP)
下一篇: Leetcode-279. Perfect Squares 完全平方数 (DP)
简米
博客等级 码龄7年 31粉丝 88原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值