[抄题]:

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.

[暴力解法]:

时间分析:

空间分析:

[优化后]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

有两个if时,为了防止两个if都不满足的情况,swap not_swap太小而搅屎棍干扰结果,初始值每次都设置成最大N

[思维问题]:

对dp很恐惧,没做过 不知道交换以后应该怎么检查,但是后续检查其实没有必要

[英文数据结构或算法,为什么不用别的数据结构或算法]:

数个数的dp需要新建数组

两个变量赋值相等,可以用连等号~

not_swap[i] = swap[i] = N;

[一句话思路]:

头一回做:递增可能不能换 能换可能不递增,所以需要把两步分开

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

[二刷]:

[三刷]:

[四刷]:

[五刷]:

[五分钟肉眼debug的结果]:

[总结]:

有两个if时,为了防止两个if都不满足的情况,swap not_swap太小而搅屎棍干扰结果,初始值每次都设置成最大N

[复杂度]:Time complexity: O(n) Space complexity: O(n)

[算法思想:递归/分治/贪心]:贪心

[关键模板化代码]:

坐标型:不存在前0位(没意义),第0位就能用 返回f[n - 1]

1- n位在循环中用,第0位直接在定义中用

swap[0] = 1;

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

[代码风格] :

class Solution {
public int minSwap(int[] A, int[] B) {
//ini: swap[1000], not_swap[1000]
int N = A.length;
int[] swap = new int[1000];
int[] not_swap = new int[1000];
swap[0] = 1;
not_swap[0] = 0; //for loop 1 < n
for (int i = 1; i < N; i++) {
swap[i] = N; not_swap[i] = N;
//compare normal or not
if (A[i - 1] < A[i] && B[i - 1] < B[i]) {
not_swap[i] = Math.min(not_swap[i], not_swap[i - 1]);
swap[i] = Math.min(swap[i], swap[i - 1] + 1);
}
//compare exchangeable or not
if (A[i - 1] < B[i] && B[i - 1] < A[i]) {
not_swap[i] = Math.min(not_swap[i], swap[i - 1]);
swap[i] = Math.min(swap[i], not_swap[i - 1] + 1);
}
} return Math.min(swap[N - 1], not_swap[N - 1]);
}
}

801. Minimum Swaps To Make Sequences Increasing 为使两个数组严格递增,所需要的最小交换次数的更多相关文章

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

  2. LeetCode 801. Minimum Swaps To Make Sequences Increasing

    原题链接在这里:https://leetcode.com/problems/minimum-swaps-to-make-sequences-increasing/ 题目: We have two in ...

  3. 【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 elem ...

  4. 【LeetCode】801. Minimum Swaps To Make Sequences Increasing 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 参考资料 日期 题目地址:https:// ...

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

  6. [Swift]LeetCode801. 使序列递增的最小交换次数 | 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 ...

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

  8. Java实现 LeetCode 801 使序列递增的最小交换次数 (DP)

    801. 使序列递增的最小交换次数 我们有两个长度相等且不为空的整型数组 A 和 B . 我们可以交换 A[i] 和 B[i] 的元素.注意这两个元素在各自的序列中应该处于相同的位置. 在交换过一些元 ...

  9. [Swift]LeetCode453. 最小移动次数使数组元素相等 | Minimum Moves to Equal Array Elements

    Given a non-empty integer array of size n, find the minimum number of moves required to make all arr ...

随机推荐

  1. 什么是spark(五)Spark SQL

       Spark SQL Spark SQL主要分为两部分,一部分是Spark Sql在scala中直接,使用作为执行层面上的应用,本质上就是生成DAG的另外一种形式:其发生试下Driver中生成: ...

  2. bzoj 3779 重组病毒——LCT维护子树信息

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3779 调了很久……已经懒得写题解了.https://www.cnblogs.com/Zinn ...

  3. spring装载配置文件失败报错:org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException

    Tomcat容器启动失败,找到 debug日志一看: Context initialization failed org.springframework. beans.factory.xml.XmlB ...

  4. SharePoint中使用Visio Service展示业务数据

    SharePoint中可以通过Visio Service可以在浏览器中查看Visio图,功能部署到系统中,一切安好. 而现实总是很折磨人,使用该功能后,相关使用者随后提出,Visio图能否与我的业务数 ...

  5. CentOS6.4的NIS+NFS配置流程

    NIS和NFS的架设请看我其他的专题日志,这边主要描述两者结合的命令流程 1.NFS上配置专门给NIS用户共享目录 /nishome/ 192.168.188.0/24(rw,sync,no_root ...

  6. PyQt5对话框

    QinputDialog 输入的值可以是字符串,数字,或者一个项目从一个列表 def showDialog(self): text, ok = QInputDialog.getText(self, ' ...

  7. cocos2d中的坐标系统

    cocos2d中Layer的默认锚点是left.buttom sprite的锚点设置 setAnchorPoint(cc.p(0.5,0.5)); 默认锚点:中心 setAnchorPoint(cc. ...

  8. nginx+php产生大量TIME_WAIT连接解决办法

    问题:当启动nginx和php-fpm时,使用netstat -tunap查看到大量TIME_WAIT连接 由于不知道原因,害怕是受到攻击,马上killall nginx 和php-fpm 会不会是8 ...

  9. SSD固态盘应用于Ceph集群的四种典型使用场景

    在虚拟化及云计算技术大规模应用于企业数据中心的科技潮流中,存储性能无疑是企业核心应用是否虚拟化.云化的关键指标之一.传统的做法是升级存储设备,但这没解决根本问题,性能和容量不能兼顾,并且解决不好设备利 ...

  10. 【转】C#命名规范

    原文地址:http://www.jb51.net/article/57163.htm 本文详细汇总了C#常用的命名规则.分享给大家供大家参考.具体如下: Pascal 规则每个单词开头的字母大写(如 ...