[抄题]:

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]);
}
}

最新文章

  1. 利用python检测色情图片简易实例
  2. native vlan(本征VLAN)
  3. 蛙蛙推荐:WEB安全入门
  4. POJ3114 Countries in War (强连通分量 + 缩点 + 最短路径 + 好题)
  5. Arduino101学习笔记(十)&mdash;&mdash; 串口通信
  6. c语言的数学函数ceil、floor、round
  7. 针对不同包之间的action跳转,怎么配置?
  8. Swift游戏实战-跑酷熊猫 02 创建熊猫类
  9. mysql之select(二)
  10. 【转】edittext设置点击链接
  11. source insight 的使用
  12. HDU 5437 Alisha’s Party
  13. Java基础学习笔记1
  14. 解决Ubuntu和Windows该文件乱码问题
  15. C++—this指针的用法
  16. JAVA基础——数组详解
  17. Redis环境搭建
  18. C语言--总结报告
  19. 巡风源码阅读与分析---AddPlugin()方法
  20. sqlite 中的分页语句

热门文章

  1. counting elements--codility
  2. bzoj 3996 [TJOI2015]线性代数——最小割
  3. 安装xamp之后,appach、mysql等问题的总结
  4. NetCore下模拟和使用Modbus工业通信协议
  5. dubbox实现REST服务
  6. Codeforces 982C(dfs+思维)
  7. 杂项:大数据 (巨量数据集合(IT行业术语))
  8. ping正常但是ssh到linux服务器很卡的解决方法
  9. UI“三重天”之实践Uiautomator1
  10. 很漂亮的按钮css样式(没有用到图片,可直接拷贝代码使用)