Contest 153
2019-09-14 23:16:25
总体感受:节奏尚可,难度尚可。然而还是卡在了最后一题,完全没有想到使用dp。
注意点:
1)Contest的最后一题往往是DP,Graph,这个敏感度需要提高;
2)DP的题目还是远远不够熟练。
- 801. Minimum Swaps To Make Sequences Increasing
问题描述:

问题求解:
keep[i] : 保留i位置的数字,使得[0, i]两个数组递增的最小交换次数。
swap[i] : 交换i位置的数字,使得[0, i]两个数组递增的最小交换次数。
public int minSwap(int[] A, int[] B) {
int n = A.length;
int[] keep = new int[n];
int[] swap = new int[n];
Arrays.fill(keep, n);
Arrays.fill(swap, n);
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] = Math.min(keep[i], keep[i - 1]);
if (A[i] > B[i - 1] && B[i] > A[i - 1]) keep[i] = Math.min(keep[i], swap[i - 1]);
if (B[i] > A[i - 1] && A[i] > B[i - 1]) swap[i] = Math.min(swap[i], keep[i - 1] + 1);
if (B[i] > B[i - 1] && A[i] > A[i - 1]) swap[i] = Math.min(swap[i], swap[i - 1] + 1);
}
return Math.min(keep[n - 1], swap[n - 1]);
}
- 1187. Make Array Strictly Increasing
问题描述:

问题求解:
public int makeArrayIncreasing(int[] arr1, int[] arr2) {
int n = arr1.length;
int[] keep = new int[n];
Set<Integer> set = new TreeSet<>();
for (int num : arr2) set.add(num);
int m = set.size();
int[] sorted = new int[m];
int idx = 0;
for (int num : set) sorted[idx++] = num;
int[] swap = new int[m];
Arrays.fill(keep, n + 1);
keep[0] = 0;
for (int i = 0; i < m; i++) swap[i] = 1;
for (int i = 1; i < n; i++) {
if (arr1[i] > arr1[i - 1]) keep[i] = keep[i - 1];
int cur_min = n;
for (int j = 0; j < m; j++) {
int cur_swap = n + 1;
if (arr1[i] > sorted[j]) keep[i] = Math.min(keep[i], swap[j]);
int temp = cur_min;
cur_min = Math.min(cur_min, swap[j]);
if (sorted[j] > arr1[i - 1]) cur_swap = Math.min(cur_swap, keep[i - 1] + 1);
cur_swap = Math.min(cur_swap, temp + 1);
swap[j] = cur_swap;
}
}
int res = Math.min(n + 1, keep[n - 1]);
for (int i = 0; i < m; i++) res = Math.min(res, swap[i]);
return res > n ? -1 : res;
}
Contest 153的更多相关文章
- AtCoder Beginner Contest 153 题解
目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...
- noip-2006普及组-数列- 【模拟-找规律-快速幂】
链接:https://ac.nowcoder.com/acm/contest/153/1047 来源:牛客网 题目描述 给定一个正整数k( ≤ k ≤ ),把所有k的方幂及所有有限个互不相等的k的方幂 ...
- 坑爹CF April Fools Day Contest题解
H - A + B Strikes Back A + B is often used as an example of the easiest problem possible to show som ...
- 「CometOJ」Contest #11
Link Aeon 显然字典序最大就是把最小的字母放在最后 Business [动态规划] 简单dp dp[i][j]dp[i][j]dp[i][j]表示到第iii天,当前有jjj块钱,最后返还的钱最 ...
- Programming Contest Problem Types
Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...
- hdu 4946 2014 Multi-University Training Contest 8
Area of Mushroom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 2016 Multi-University Training Contest 2 D. Differencia
Differencia Time Limit: 10000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- 2016 Multi-University Training Contest 1 G. Rigid Frameworks
Rigid Frameworks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- hdu-5988 Coding Contest(费用流)
题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
随机推荐
- redis笔记之一
NoSQL简介 全称是Not Only SQL,泛指菲关系型数据库,它是通过键值对存储数据并且将数据存储在内存中.而像mysql,sql server这些通过关系表存数据的就叫关系型数据库 为什么需要 ...
- Kubernetes集群部署DNS插件
准备 kube-dns 相关镜像 准备 kube-dns 相关 yaml 文件 系统预定义的 RoleBinding 配置 kube-dns 相关服务 检查 kube-dns 功能 kube-dns ...
- Yii的自带缓存的使用
Yii的自带缓存都继承CCache 类, 在使用上基本没有区别缓存基础类 CCache 提供了两个最常用的方法:set() 和 get().要在缓存中存储变量 $value,我们选择一个唯一 ID 并 ...
- 安卓权威编程指南 挑战练习(第26章 在 Lollipop 设备上使用 JobService)
26.11 挑战练习:在 Lollipop 设备上使用 JobService 请创建另一个 PollService 实现版本.新的 PollService 应该继承 JobService 并使用 Jo ...
- Android中使用AsyncTask
>##今天写作业用到了AnsyncTask,记录一下自己的使用情况 >###1.Android.os.AsyncTask类 > 1.AsyncTask类对线程间通讯进行了包装,我们 ...
- 2、【Spark】Spark环境搭建(集群方式)
Spark集群方式搭建结构如图所示,按照主从方式.
- 程序小白如何快速开发OA办公系统
对于企业开发oa办公系统,成本高,周期长.有些企业花高价购买,购买后受制于软件商,很多功能只能按原来设计需求走,无法升级或者升级慢.这些由于软件商的开发效率低难以及时地响应企业的需求变化,所以就有可能 ...
- Typecho 主题制作记录
模板制作快速入门 模板的制作并非难事,只要你写好了HTML和CSS,嵌套模板就非常简单了,你无需了解标签的内部结构,你只要会使用,模板就能迅速完成.这篇文章只简单的介绍了常用标签的使用方法,希望能带你 ...
- 使用GitHub(二):配置并使用Git创建版本库
使用GitHub(二):配置并使用Git创建版本库 本文简单介绍使用GitHub对代码进行版本控制,包括添加SSHkey.配置Git.使用Git创建版本库并在GitHub上进行管理,主要目的是对学习内 ...
- Java基础--方法的定义
1.为什么要有方法? 方法(又叫函数)就是一段特定功能的代码块.方法提高程序的复用性和可读性. 比如,有了方法,我们可以把要重复使用的一段代码提炼出来,然后在每个需要执行这段代码的地方去调用即可. 2 ...