801. 使序列递增的最小交换次数

我们有两个长度相等且不为空的整型数组 A 和 B 。

我们可以交换 A[i] 和 B[i] 的元素。注意这两个元素在各自的序列中应该处于相同的位置。

在交换过一些元素之后,数组 A 和 B 都应该是严格递增的(数组严格递增的条件仅为A[0] < A[1] < A[2] < … < A[A.length - 1])。

给定数组 A 和 B ,请返回使得两个数组均保持严格递增状态的最小交换次数。假设给定的输入总是有效的。

示例:

输入: A = [1,3,5,4], B = [1,2,3,7]

输出: 1

解释:

交换 A[3] 和 B[3] 后,两个数组如下:

A = [1, 3, 5, 7] , B = [1, 2, 3, 4]

两个数组均为严格递增的。

注意:

A, B 两个数组的长度总是相等的,且长度的范围为 [1, 1000]。

A[i], B[i] 均为 [0, 2000]区间内的整数。

PS:

其实这个题换成正常的动态规划就明白了,但是空间占用太高,导致效率很低

所以就用两个值保存上一步的操作,如果有看不懂的欢迎评论,

最近事情比较多,可能要晚上或者间隙的时间才能回复,但有时间我一定会回复的

class Solution {
public int minSwap(int[] A, int[] B) {
int n1 = 0, s1 = 1;//n1,s1一直都是保存的上一次的操作
//n1表示的是上一步不交换的操作,s1保存的是上一步交换的操作
for (int i = 1; i < A.length; ++i) {
int n2 = Integer.MAX_VALUE, s2 = Integer.MAX_VALUE;
//可能同时满足交换和不交换的时候,那么我们都做操作,选择最小的那个
if (A[i-1] < A[i] && B[i-1] < B[i]) {
//这里的n2因为附上了最大值所有只能是n1,因为是取最小的
n2 = n1;
//因为符合条件了,才能进行交换
s2 = s1 + 1;
}
if (A[i-1] < B[i] && B[i-1] < A[i]) {
//这个是当前这一步不换,选择这一步不换的,或者选上一步换了的,因为满足换的条件了,两者选最小
n2 = Math.min(n2, s1);
//这个是当前这一步换,选当前这一步换,或者,上一步不换的+1就是这一步换
//如果没符合上面那个条件,s2是最大值,是不可能被选到的
s2 = Math.min(s2, n1 + 1);
}
n1 = n2;
s1 = s2;
}
return Math.min(n1, s1);
}
}

Java实现 LeetCode 801 使序列递增的最小交换次数 (DP)的更多相关文章

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

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

  3. 使序列有序的最少交换次数(minimum swaps)

    交换相邻两数 如果只是交换相邻两数,那么最少交换次数为该序列的逆序数. 交换任意两数 数字的总个数减去循环节的个数?? A cycle is a set of elements, each of wh ...

  4. Java实现 LeetCode 673 最长递增子序列的个数(递推)

    673. 最长递增子序列的个数 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, ...

  5. Java实现 LeetCode 376 摆动序列

    376. 摆动序列 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4,9,2,5 ...

  6. leetcode 945. 使数组唯一的最小增量

    题目 给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1. 返回使 A 中的每个值都是唯一的最少操作次数. 示例 1: 输入:[1,2,2] 输出:1 解释:经过一次 mov ...

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

  8. Java实现 LeetCode 712 两个字符串的最小ASCII删除和(最长公共子串&&ASCII值最小)

    712. 两个字符串的最小ASCII删除和 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 ...

  9. Java实现 LeetCode 813 最大平均值和的分组 (DFS+DP记忆化搜索)

    813. 最大平均值和的分组 我们将给定的数组 A 分成 K 个相邻的非空子数组 ,我们的分数由每个子数组内的平均值的总和构成.计算我们所能得到的最大分数是多少. 注意我们必须使用 A 数组中的每一个 ...

随机推荐

  1. 前后端bug定位

    否一致一个商品状态为status,待上架status=0,上架中status=1,下架status=2 前端bug:如:一个商品上架成功后,数据库显示的状态status=1,这时候可能是前端对应值的定 ...

  2. 使用PXE+Kickstart无人值守安装服务

    一.      配置DHCP服务程序 1)      按照图在虚拟机的虚拟网络编辑器中关闭自身的DHCP服务. 2)      当挂载好光盘镜像并把Yum仓库文件配置妥当后,就可以安装DHCP服务程序 ...

  3. Power Query:非常规工资条

    常规工资条为标题.内容.空行,每三行一循环,横向排版.打印.空行填充颜色,方便切割.其中用到函数嵌套,先把table以row转换为list,然后用List.TransformMany生成Table.C ...

  4. Offset等一些类似属性的使用

    1.offset系列 // offset 系列 var father = document.querySelector('.father'); var son = document.querySele ...

  5. 设计模式之GOF23工厂模式02

    抽象工厂模式 不能添加单个产品,产品族 public interface Seat {  void anmo();}class GoodSeat implements Seat { @Override ...

  6. Mysql 常用函数(23)- sign 函数

    Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html sign 的作用 返回参数的符号 sign 的语法 ...

  7. pc建站自适应

    转载   来自https://www.cnblogs.com/eyed/p/7872521.html   HTML5----响应式(自适应)网页设计   现在,很多项目都需要做响应式或者自适应的来适应 ...

  8. vue element-ui el-form-item 循环渲染,验证表单内容

    data里面如下图:

  9. kibana 通过nginx+ldap实现登录认证

    nginx配置 使用自己搭建的openldap 使用用户中心的openldap

  10. Vue element-ui date-picker 结束时间大于开始时间且开始时间小于此刻(转)

    转载自:https://blog.csdn.net/wintersweetGirl/article/details/82461412 <el-form ref="form" ...