801. Minimum Swaps To Make Sequences Increasing
We have two integer sequences
AandBof the same non-zero length.We are allowed to swap elements
A[i]andB[i]. Note that both elements are in the same index position in their respective sequences.At the end of some number of swaps,
AandBare both strictly increasing. (A sequence is strictly increasing if and only ifA[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, Bare 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].
Approach #1: Brute force. [C++][TEL]
class Solution {
public:
int minSwap(vector<int>& A, vector<int>& B) {
int ans = INT_MAX;
dfs(A, B, 1, 0, ans);
return ans;
}
private:
void dfs(vector<int>& A, vector<int>& B, int i, int c, int& ans) {
if (c >= ans) return;
if (i == A.size()) {
ans = min(ans, c);
return;
}
if (A[i] > A[i-1] && B[i] > B[i-1])
dfs(A, B, i+1, c, ans);
if (A[i] > B[i-1] && B[i] > A[i-1]) {
swap(A[i], B[i]);
dfs(A, B, i+1, c+1, ans);
swap(A[i], B[i]);
}
}
};
Approach #2: DP. [Java]
class Solution {
public int minSwap(int[] A, int[] B) {
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;
}
if (A[i] > B[i-1] && B[i] > A[i-1]) {
swap[i] = Math.min(swap[i], keep[i-1] + 1);
keep[i] = Math.min(keep[i], swap[i-1]);
}
}
return Math.min(keep[n-1], swap[n-1]);
}
}
Analysis:
This problem can be solved using dynamic programming, at each position, we can choose to swap or not. Since we want two sorted arrays, at each position, whether to swap or not depends on the choice at previous position, so we can form a recursive formula.
When A[0, i-1] and B[0, i-1] are sorted, since "It is guaranted that the given input always makes it possible.". there are two cases on index i:
They are both still sorted when add number at index i, A[i] > A[i-1] && B[i] > B[i-1]
They are not sorted when add number at index i, in this case, only A[i] > B[i-1] && B[i] > A[i-1] can guarantee that "the given input always makes it possible".
swap[i] to represent the minimum swaps to make the A[0, i] and B[0, i] equences increasing for 0 <= i <= n in condition that we swap A[i] and B[i].
keep[i] torepresent the minimum swaps to make the A[0, i] and B[i] sequences increasing for 0 <= i <= n in condition that we don't swap A[i] and B[i].
Reference:
801. Minimum Swaps To Make Sequences Increasing的更多相关文章
- LeetCode 801. Minimum Swaps To Make Sequences Increasing
原题链接在这里:https://leetcode.com/problems/minimum-swaps-to-make-sequences-increasing/ 题目: We have two in ...
- 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 ...
- [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 ...
- 【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 ...
- 【LeetCode】801. Minimum Swaps To Make Sequences Increasing 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 参考资料 日期 题目地址:https:// ...
- [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 ...
- [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 ...
- 使序列有序的最少交换次数(minimum swaps)
交换相邻两数 如果只是交换相邻两数,那么最少交换次数为该序列的逆序数. 交换任意两数 数字的总个数减去循环节的个数?? A cycle is a set of elements, each of wh ...
- 【leetcode】1247. Minimum Swaps to Make Strings Equal
题目如下: You are given two strings s1 and s2 of equal length consisting of letters "x" and &q ...
随机推荐
- .NET中的Request
获得浏览器中的URL 例:http://121.41.30.93:8010/ch/spell.aspx?id=58 Request.Url.PathAndQuery:/ch/spell.aspx?id ...
- vim之quickfix
[vim之quickfix] quickfix功能将编译过程中产生的错误信息保存到文件中,然后vim利用这些信息跳转到源文件的对应位置,我们就可以进行错误的修正,之后跳到下一个错误重复上述操作,从而极 ...
- 测试用例Excel模板For Quality Center
Subject Test Name Description Step Name Step Description Expected Result PU Regr\Component\Attribut ...
- Zookeeper 系列(二)安装配制
Zookeeper 系列(二)安装配制 一.Zookeeper 的搭建方式 Zookeeper 安装方式有三种,单机模式和集群模式以及伪集群模式. 单机模式 :Zookeeper 只运行在一台服务器上 ...
- web札记
url中不能是#号,struts不读取#之后的字符串.
- 如何将网站部署到tomcat根目录下
更改前访问:http://192.168.1.2/baby 更改后访问:http://192.168.1.2/ 打开tomcat/conf/server.xml找到 <Host name=&qu ...
- 二进制搭建kubernetes多master集群【开篇、集群环境和功能介绍】
本文主要说明kubernetes集群使用组建的版本和功能介绍.. 一.组件版本 Kubernetes 1.12.3 Docker 18.06.1-ce Etcd 3.3.10 Flanneld 0.1 ...
- yii2学习网站
1.http://tech.anruence.com/ 2.http://www.yiichina.com/doc/guide/2.0/input-multiple-models
- 40 Older People Needed Less Sleep ?老年人要睡得少 ?
Older People Needed Less Sleep ?老年人要睡得少 ? ①The popular notion that older people need less sleep than ...
- C# winIO32位,64位的使用(运行时要用管理员身份)
下载地址: http://www.internals.com/utilities/WinIo.zip 一个按键的消息产生流程如下: 1)硬件中断/硬件端口数据 WinIO能模拟,或者修改IDT是在这一 ...