[抄题]:

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. 排序 第K大等问题总结

    在公司面试时,当场写排序比较多,虽然都是老掉牙的问题,还是要好好准备下 快速排序,以第一个元素为关键词比较,每次比较结束,关键词都会去到最终位置上 //7 3 2 9 8 3 4 6 //7 3 2 ...

  2. Python--线性代数篇

    讲解Python在线性代数中的应用,包括: 一.矩阵创建 先导入Numpy模块,在下文中均采用np代替numpy import numpy as np 矩阵创建有两种方法,一是使用np.mat函数或者 ...

  3. 快速排序算法-python实现

    #-*- coding: UTF-8 -*- import numpy as np def Partition(a, i, j): x = a[i] #将数组的第一个元素作为初始基准位置 p = i ...

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

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

  5. mysql的partition分区

    前言:当一个表里面存储的数据特别多的时候,比如单个.myd数据都已经达到10G了的话,必然导致读取的效率很低,这个时候我们可以采用把数据分到几张表里面来解决问题.方式一:通过业务逻辑根据数据的大小通过 ...

  6. openresty+lua做接口调用权限限制

    说明:openresty可以理解为一个服务器它将nginx的核心包含了过来,并结合lua脚本语言实现一些对性能要求高的功能,该篇文章介绍了使用openresty 1.purview.lua --调用j ...

  7. GDB调试字符数组时指针和数组区别的体现

    测试ftell函数时发现报错,先贴源码 // File Name: ftell.c #include <stdio.h> #include <stdlib.h> int mai ...

  8. clientHeight , scrollHeight , offsetHeight之间的区别及兼容方案

    clientHeight , scrollHeight , offsetHeight相信每个人都用过,可是每次用都要查一下到底哪个是文档大小哪个是视口大小,还有头疼的兼容问题. 先来官方的了解一下这三 ...

  9. 详解AJAX核心中的XMLHttpRequest对象

    转自:http://developer.51cto.com/art/200904/119577.htm XMLHttpRequest 对象是AJAX功能的核心,要开发AJAX程序必须从了解XMLHtt ...

  10. node的express中使用socket.io

    服务器端server.js代码 var express=require("express"); var http=require("http"); var si ...