[抄题]:

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. autoreconf报错LC_ALL和LANGUAGE未设置

    报错提示: merlin@ubuntu:/opt/smbshared/projects/x86test/openvpn/openvpn-release-2.4$ autoreconf -i -v -f ...

  2. 【备忘:待完善】nsq集群初体验

    本机的一个节点及监控与管理后台 虚拟机中的一个节点 命令: [root@vm-vagrant nsq]# nsqd --lookupd-tcp-address=192.168.23.150:4160 ...

  3. HL7 Tools suite

    HL7的官网有很多开源工具, 比如:RoseTree,V3Generator,RMIM Designer, Design Repository, V2 & V3 Mapping Tools等. ...

  4. 一段四表联查外加字符拼接的sql,留存备查

    select DISTINCT [P_ID],[P_CODE],[P_CODE_OLD],[P_NAME],[NATIVE_PLACE],[GENDER],[EDUCATION],[EMPLOY_DA ...

  5. c++ 异常处理(3)

    <C++编码规范与指导>一文,就已经规划着要加入这样一篇讨论 C++ 异常机制的文章了.没想到时隔几年以后才有机会把这个尾巴补完 :-). 还是那句开场白:“在恰当的场合使用恰当的特性” ...

  6. java web 程序---刷新页面次数

    <%! int count=0; %> <% count++; session.setAttribute("count",count); out.print(&q ...

  7. java代码--------编写0懂啊PI之间求随机数的方法

    总结:其实每次运行,显示出来的结果个数是随机的. package com.mmm; //编写0到PI之间求随机数的方法 public class MEm { public static void ma ...

  8. Java-Runoob:Java 正则表达式

    ylbtech-Java-Runoob:Java 正则表达式 1.返回顶部 1. Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某 ...

  9. ApacheOFBiz的相关介绍以及使用总结(一)

    由于最近一段时间在给一个创业的公司做客户关系管理CRM系统,限于人力要求(其实是没有多少人力),只能看能否有稳定,开源的半成品进行改造,而且最好不需要前端(js)相关开发人员的支援就可以把事情做成,经 ...

  10. 第七章 Rolling update

    7.1 实践 apiVersion: apps/v1beta1 kind: Deployment metadata: name: httpd spec: replicas: 3 template: m ...