Contest 141
2019-06-16 14:35:52
- 1089. Duplicate Zeros - Easy
问题描述:

问题求解:
很显然的可以使用O(n), O(n)的解法。主要问题在于如何在O(1)空间复杂度完成求解。
答案就是通过两次遍历,第一次求出复制后的数组的长度,第二次遍历填写数组。
public void duplicateZeros(int[] arr) {
if (arr.length == 1) return;
final int n = arr.length;
int newLen = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == 0) newLen++;
newLen++;
}
for (int i = n - 1; i >= 0; i--) {
if (--newLen < n) arr[newLen] = arr[i];
if (arr[i] == 0 && --newLen < n) arr[newLen] = 0;
}
}
- 1090. Largest Values From Labels - Medium
问题描述:

问题求解:
本题要求的是挑选至多num_wanted个数的物品,并且每个物品不能超过limit的数目。
显然的是,可以根据价值来贪心的选取,问题就是如何不超过limit的数目,也就是将value和label建立联系。这个建立联系的方式是需要经验的,这里采用的是组pair的方式建立联系,事实上,很多时候这种建立pair的方式是最行之有效的,可以特别关注一下。
public int largestValsFromLabels(int[] values, int[] labels, int num_wanted, int use_limit) {
List<int[]> pairs = new ArrayList<>();
Map<Integer, Integer> map = new HashMap<>();
final int n = values.length;
for (int i = 0; i < n; i++) {
if (!map.containsKey(labels[i])) map.put(labels[i], 0);
pairs.add(new int[]{values[i], labels[i]});
}
PriorityQueue<int[]> pq = new PriorityQueue<>((int[] o1, int[] o2) -> o2[0] - o1[0]);
pq.addAll(pairs);
int res = 0;
for (int i = 0; i < num_wanted && !pq.isEmpty();) {
int[] curPair = pq.poll();
if (map.get(curPair[1]) < use_limit) {
res += curPair[0];
map.put(curPair[1], map.get(curPair[1]) + 1);
i++;
}
}
return res;
}
- 1091. Shortest Path in Binary Matrix - Medium
问题描述:

问题求解:
裸的BFS。
public int shortestPathBinaryMatrix(int[][] grid) {
if (grid.length == 0 || grid[0].length == 0) return -1;
final int n = grid.length;
final int[][] dirs = new int[][]{{-1, 0}, {1, 0}, {0, -1}, {0, 1}, {-1, -1}, {-1, 1}, {1, -1}, {1, 1}};
if (grid[0][0] != 0 || grid[n - 1][n - 1] != 0) return -1;
Queue<int[]> q = new LinkedList<>();
q.add(new int[]{0, 0});
grid[0][0] = 2;
int step = 0;
while (!q.isEmpty()) {
int size = q.size();
step++;
for (int i = 0; i < size; i++) {
int[] curNode = q.poll();
for (int[] dir : dirs) {
int x = curNode[0] + dir[0];
int y = curNode[1] + dir[1];
if (x < 0 || x >= n || y < 0 || y >= n || grid[x][y] != 0) continue;
if (x == n - 1 && y == n - 1) return step + 1;
q.add(new int[]{x, y});
grid[x][y] = 2;
}
}
}
return -1;
}
- 1092. Shortest Common Supersequence - Hard
问题描述:

问题求解:
问题需要的是最短的supersequence,那么就是需要将两个字符串拼接后能够最大限度的去除重复的字符,因此本题就变为了求最长公共子序列的问题,并且需要构造出最长公共子序列。
这里直接暴力的进行构造。
public String shortestCommonSupersequence(String s1, String s2) {
if (s1.length() == 0) return s2;
if (s2.length() == 0) return s1;
int m = s1.length();
int n = s2.length();
String common = lcs(s1, s2);
System.out.println(common);
StringBuffer sb = new StringBuffer();
int i = 0;
int j = 0;
for (char c : common.toCharArray()) {
while (i < m && s1.charAt(i) != c) {
sb.append(s1.charAt(i));
i++;
}
while (j < n && s2.charAt(j) != c) {
sb.append(s2.charAt(j));
j++;
}
sb.append(c);
i++;
j++;
}
while (i < m) sb.append(s1.charAt(i++));
while (j < n) sb.append(s2.charAt(j++));
return sb.toString();
}
private String lcs(String s1, String s2) {
int m = s1.length();
int n = s2.length();
String[][] dp = new String[m + 1][n + 1];
for (int j = 0; j <= n; j++) dp[0][j] = "";
for (int i = 0; i <= m; i++) dp[i][0] = "";
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (s1.charAt(i - 1) == s2.charAt(j - 1)) dp[i][j] = dp[i - 1][j - 1] + s1.charAt(i - 1);
else if (dp[i - 1][j].length() > dp[i][j - 1].length()) dp[i][j] = dp[i - 1][j];
else dp[i][j] = dp[i][j - 1];
}
}
return dp[m][n];
}
Contest 141的更多相关文章
- floj 2265 【lxs Contest #141】航海舰队
首先抠出包围了阵形的最小矩形. 将地图拉伸成一条链,即将第一行.第二行.第三行按顺序连接.阵形也可以用同样的方法处理. 那么问题转化为,给定两个 01 串 S 和 T,问每个 S 中长度为 |T| 的 ...
- 牛客网多校第3场C-shuffle card 平衡树或stl(rope)
链接:https://www.nowcoder.com/acm/contest/141/C 来源:牛客网 题目描述 Eddy likes to play cards game since there ...
- 牛客多校第三场 A- PACM Team 背包/记忆路径
https://www.nowcoder.com/acm/contest/141#question 一眼背包,用四维dp记录在A,B,C,D条件限制下可以获得的最大知识点,但是题目要求输出路径,在输入 ...
- 牛客网多校第3场Esort string (kmp)
链接:https://www.nowcoder.com/acm/contest/141/E 来源:牛客网 题目描述 Eddy likes to play with string which is a ...
- 牛客多校第三场 A—pacm team (4维背包加路径压缩)
链接:https://www.nowcoder.com/acm/contest/141/A 来源:牛客网 Eddy was a contestant participating , Eddy fail ...
- 牛客第三场多校 E Sort String
链接:https://www.nowcoder.com/acm/contest/141/E来源:牛客网 Eddy likes to play with string which is a sequen ...
- 牛客第三场多校 H Diff-prime Pairs
链接:https://www.nowcoder.com/acm/contest/141/H来源:牛客网 Eddy has solved lots of problem involving calcul ...
- 2018牛客网暑期ACM多校训练营(第三场) H - Shuffle Cards - [splay伸展树][区间移动][区间反转]
题目链接:https://www.nowcoder.com/acm/contest/141/C 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...
- 2018牛客网暑期ACM多校训练营(第三场) A - PACM Team - [四维01背包][四约束01背包]
题目链接:https://www.nowcoder.com/acm/contest/141/A 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...
随机推荐
- androidthreadtest<CODE 2 chaper9>
学习目的:1.了解android线程的使用 2.了解主线程与子线程区别 3.解析异步处理机制主线程与子线程:所谓主线程,在Windows窗体应用程序中一般指UI线程,这个是程序启动的时候首先创建的线程 ...
- 名企6年Java程序员的工作感悟,送给迷茫的你
程序员从开始选择到坚持下去,工作了六年对一个程序员意味什么?在职位上:高级开发工程师?架构师?技术经理?or ... ?在能力上:各种编码无压力?核心代码无压力?平台架构无压力? or ... fuc ...
- 初识Arduino
Arduino是一款便捷灵活.方便上手的开源电子原型平台.包含硬件(各种型号的Arduino板)和软件(Arduino IDE).由一个欧洲开发团队于2005年冬季开发.其成员包括Massimo Ba ...
- UBB代码
UBB代码是HTML(标准通用标记语言下的一个应用)的一个变种,是Ultimate Bulletin Board (国外的一个BBS程序)采用的一种特殊的TAG.您也许已经对它很熟悉了.UBB代码很简 ...
- webstorm 提示 "scanning files to index..." 一直不能编译的问题
先说一下我的操作过程吧: 下载公司的vue项目后,要用到webpack打包工具,需要按照package.json安装一些依赖,我使用了镜像后,npm install模块时候生成了一个 node_mod ...
- [LeetCode] 994. Rotting Oranges 腐烂的橘子
题目: 思路: 每个腐烂的橘子都能将自己上下左右的新鲜橘子传染,像极了现在的肺炎... 如果格子中只有一个腐烂的橘子,那么这便是一个典型的层次遍历,第一个传染多个,称为第二层,第二层传染第三层 但这里 ...
- #AcWing系列课程Level-2笔记——5.高精度“+”算法
高精度"+"算法 编写高精度"+",记住下面的过程,代码也就游刃有余了! 1.首先我们要明白大整数是如何存储的? 2.其次存储完,如何运算? 高精度" ...
- 容器内init进程方案
背景 进程标识符 (PID) 是Linux 内核为每个进程提供的唯一标识符.熟悉docker的同学都知道, 所有的进程 PID都属于某一个PID namespaces, 也就是说容器具有一组自己的 P ...
- 谈谈集合.Queue
之前说到,Java中集合的主要作用就是装盛其他数据和实现常见的数据结构.所以当我们要用到"栈"."队列"."链表"和"数组&quo ...
- 机器学习基础——简单易懂的K邻近算法,根据邻居“找自己”
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天的文章给大家分享机器学习领域非常简单的模型--KNN,也就是K Nearest Neighbours算法,翻译过来很简单,就是K最近邻居 ...