801. Minimum Swaps To Make Sequences Increasing
2018-03-31 21:52
351 查看
We have two integer sequences
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:
,真难啊。。。还是找状态转移方程,设置数组dp[i][0]和dp[i][1],dp[i][0]表示第i处不交换需要交换的总次数,dp[i][1]表示第i次交换所需要交换的总次数。如果A[i-1]<A[i]&&B[i-1]<B[i],那么第i处不交换的话,dp[i][[0=min(dp[i][0],dp[i-1][0]),交换的话,dp[i][1]=min(dp[i-1][1]+1,dp[i][1]),因为交换第i处,那么第i-1处也可能也要交换。
对于A[i-1]<B[i]&&B[i-1]<A[i],也可以照此分析。
public int minSwap(int[] A, int[] B) {
int [][]dp=new int[A.length][2];
for(int i=0;i<A.length;i++)
{
dp[i][0]=Integer.MAX_VALUE;
dp[i][1]=Integer.MAX_VALUE;
}
dp[0][0]=0;
dp[0][1]=1;
for(int i=1;i<A.length;i++)
{
if(A[i-1]<A[i]&&B[i-1]<B[i])
dp[i][0]=Math.min(dp[i][0],dp[i-1][0]);
if(A[i-1]<B[i]&&B[i-1]<A[i])
dp[i][0]=Math.min(dp[i][0],dp[i-1][1]);
if(A[i-1]<A[i]&&B[i-1]<B[i])
dp[i][1]=Math.min(dp[i-1][1]+1,dp[i][1]);
if(A[i-1]<B[i]&&B[i-1]<A[i])
dp[i][1]=Math.min(dp[i][1],dp[i-1][0]+1);
}
return Math.min(dp[A.length-1][0],dp[A.length-1][1]);
}
}
Aand
Bof 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,
Aand
Bare 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.
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].
题意:
给出两个相同长度的数组,求至少交换几次,使得两个数组都是严格递增的。交换必须是相同的index处交换,即A[i]只能与B[i]交换。思路:
答案都看半天,手动再见,真难啊。。。还是找状态转移方程,设置数组dp[i][0]和dp[i][1],dp[i][0]表示第i处不交换需要交换的总次数,dp[i][1]表示第i次交换所需要交换的总次数。如果A[i-1]<A[i]&&B[i-1]<B[i],那么第i处不交换的话,dp[i][[0=min(dp[i][0],dp[i-1][0]),交换的话,dp[i][1]=min(dp[i-1][1]+1,dp[i][1]),因为交换第i处,那么第i-1处也可能也要交换。
对于A[i-1]<B[i]&&B[i-1]<A[i],也可以照此分析。
代码:
class Solution {public int minSwap(int[] A, int[] B) {
int [][]dp=new int[A.length][2];
for(int i=0;i<A.length;i++)
{
dp[i][0]=Integer.MAX_VALUE;
dp[i][1]=Integer.MAX_VALUE;
}
dp[0][0]=0;
dp[0][1]=1;
for(int i=1;i<A.length;i++)
{
if(A[i-1]<A[i]&&B[i-1]<B[i])
dp[i][0]=Math.min(dp[i][0],dp[i-1][0]);
if(A[i-1]<B[i]&&B[i-1]<A[i])
dp[i][0]=Math.min(dp[i][0],dp[i-1][1]);
if(A[i-1]<A[i]&&B[i-1]<B[i])
dp[i][1]=Math.min(dp[i-1][1]+1,dp[i][1]);
if(A[i-1]<B[i]&&B[i-1]<A[i])
dp[i][1]=Math.min(dp[i][1],dp[i-1][0]+1);
}
return Math.min(dp[A.length-1][0],dp[A.length-1][1]);
}
}
相关文章推荐
- 801. Minimum Swaps To Make Sequences Increasing
- leetcode801 Minimum Swaps To Make Sequences Increasing (动态规划)
- [LeetCode] Minimum Swaps To Make Sequences Increasing 使得序列递增的最小交换
- Minimum number of swaps required to sort an array
- Is it possible to make asp.net themes available to all sites on the sever?
- how to make a driver pagable
- make: Nothing to be done for `all' 解决方法 ---实验2
- 补记 How to make your presentation better
- linux 下apche无法监听端口解决办法(Permission denied: make_sock: could not bind to address)
- Every day to make meaning of their own future. . . . . .
- geeksforgeeks@ Minimum Points To Reach Destination (Dynamic Programming)
- centos7.3下安装nginx出现make: *** No rule to make target `build', needed by `default'. Stop.
- 《How To Make a Tile-Based Game with Cocos2D》
- leetcode - 452. Minimum Number of Arrows to Burst Balloons
- make-j8 make: Nothing to be done for 'all'.
- No rule to make target out/target/common/obj/JAVA_LIBRARIES/librilproto-java
- apache启动报错(98)Address already in use: make_sock: could not bind to address [::]:80
- Django 1.8 - “No migrations to apply” when run migrate after makemigrations 解决办法
- 免费电子书:The Guide to Minimum Viable Products
- android5.0编译问题:No rule to make target 'external/chromium_org/third_party/angle/.git/index',