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 ...
随机推荐
- 混乱中的ICO平台,会不会是下一个P2P的重灾区?
当众多巨头和创业者还在为共享打车.共享单车.VR.IP化.互联网金融沉迷时,一种全新的"众筹"正在造就一个又一个暴富神话.其名为ICO,即首次代币众筹,一般指区块链初创项目在众筹平 ...
- 阿里为何要用独立APP挖微信微商墙角?
微商,这个被很多人看来是逃离马云魔咒,和淘宝抗衡的电商模式,自诞生到狂飙就伴随着种种争议.由于传播效率极强,在很长时间里也一直是不少人口中津津乐道的神话故事和救市良方.以至于,淘宝推出各种手段封杀 ...
- PyGame学习笔记之壹
新建窗口 代码 '''PyGame学习笔记之壹''' import pygame # 引入 PyGame 库 pygame.init() # PyGame 库初始化 screen = pygame.d ...
- flask 中文乱码
返回的json数据中包含中文,但前端显示乱码,添加了 app.config['JSON_AS_ASCII'] = False仍然没有解决, app.config['JSONIFY_MIMETYPE'] ...
- 使用EventBus + Redis发布订阅模式提升业务执行性能
前言 最近一直奔波于面试,面了几家公司的研发.有让我受益颇多的面试经验,也有让我感觉浪费时间的面试经历~因为疫情原因,最近宅在家里也没事,就想着使用Redis配合事件总线去实现下具体的业务. 需求 一 ...
- hw从外网到内网的渗透姿势分享
现在这段时间是全员 hw 时期,刚好前几天也有幸参与了某个地方的 hw 行动,作为攻击方,这里就简单总结一下最近挖洞的思路吧.因为可能怕涉及到敏感的东西,这里就有的地方不会细说了. 因为本人比较菜,所 ...
- ASP.NET CORE 启动过程及源码解读
在这个特殊的春节,大家想必都在家出不了们,远看已经到了回城里上班的日子,但是因为一只蝙蝠的原因导致我们无法回到工作岗位,大家可能有的在家远程办公,有些在家躺着看书,有的是在家打游戏:在这个特殊无聊的日 ...
- JAVA GC算法详解
生存还是死亡 对象是否需要被垃圾收集器回收主要有两种方式:引用计数法和可达性分析算法 引用计数法 给对象添加一个引用计数器,每当有一个地方引用他的时候,计数器的数值就+1,当引用失效时,计数器就-1: ...
- 前端进阶系列(三):HTML5新特性
HTML5 是对 HTML 标准的第五次修订.其主要的目标是将互联网语义化,以便更好地被人类和机器阅读,并同时提供更好地支持各种媒体的嵌入.HTML5 的语法是向后兼容的.现在国内普遍说的 H5 是包 ...
- 【译文连载】 理解Istio服务网格(第七章 安全)
全书目录 第一章 概述 第二章 安装 第三章 流控 第四章 服务弹性 第五章 混沌测试 第六章 可观测性 本文目录 第7章 安全 7.1 身份认证 7.1.1 Kubernetes上的Istio的身份 ...