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的更多相关文章

  1. floj 2265 【lxs Contest #141】航海舰队

    首先抠出包围了阵形的最小矩形. 将地图拉伸成一条链,即将第一行.第二行.第三行按顺序连接.阵形也可以用同样的方法处理. 那么问题转化为,给定两个 01 串 S 和 T,问每个 S 中长度为 |T| 的 ...

  2. 牛客网多校第3场C-shuffle card 平衡树或stl(rope)

    链接:https://www.nowcoder.com/acm/contest/141/C 来源:牛客网 题目描述 Eddy likes to play cards game since there ...

  3. 牛客多校第三场 A- PACM Team 背包/记忆路径

    https://www.nowcoder.com/acm/contest/141#question 一眼背包,用四维dp记录在A,B,C,D条件限制下可以获得的最大知识点,但是题目要求输出路径,在输入 ...

  4. 牛客网多校第3场Esort string (kmp)

    链接:https://www.nowcoder.com/acm/contest/141/E 来源:牛客网 题目描述 Eddy likes to play with string which is a ...

  5. 牛客多校第三场 A—pacm team (4维背包加路径压缩)

    链接:https://www.nowcoder.com/acm/contest/141/A 来源:牛客网 Eddy was a contestant participating , Eddy fail ...

  6. 牛客第三场多校 E Sort String

    链接:https://www.nowcoder.com/acm/contest/141/E来源:牛客网 Eddy likes to play with string which is a sequen ...

  7. 牛客第三场多校 H Diff-prime Pairs

    链接:https://www.nowcoder.com/acm/contest/141/H来源:牛客网 Eddy has solved lots of problem involving calcul ...

  8. 2018牛客网暑期ACM多校训练营(第三场) H - Shuffle Cards - [splay伸展树][区间移动][区间反转]

    题目链接:https://www.nowcoder.com/acm/contest/141/C 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...

  9. 2018牛客网暑期ACM多校训练营(第三场) A - PACM Team - [四维01背包][四约束01背包]

    题目链接:https://www.nowcoder.com/acm/contest/141/A 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...

随机推荐

  1. 确认下眼神!有没有遇上对的工资(测试leader)

    屏蔽敏感信息,直接上图: ▼

  2. MySQL show命令的用法

    show tables或show tables from database_name; // 显示当前数据库中所有表的名称 show databases; // 显示mysql中所有数据库的名称 sh ...

  3. java.lang.SecurityException: class "javax.servlet.AsyncContext"'s signer information does not match signer information of other classes in the same package

    最近在写个Http协议的压测挡板时,遇到以下错误. 2018-03-08 10:34:07.808:INFO:oejs.Server:jetty-8.1.9.v20130131 2018-03-08 ...

  4. marquee上下无缝滚动

    <!DOCTYPE html><html><head><meta charset="utf-8"><meta name=&qu ...

  5. Java中如何更优雅的处理空值

    经常看到项目中存在到处空值判断的情况,这些判断,会让人觉得摸不着头绪,它的出现很有可能和当前的业务逻辑并没有关系.但它会让你很头疼.有时候,更可怕的是系统因为这些空值的情况,会抛出空指针异常,导致业务 ...

  6. 移动端1px的适配问题

    先看个概念: window.devicePixelRatio = 物理像素 / dips(独立像素) window.devicePixelRatio是设备的物理像素和独立像素的比例,可以叫设备像素比. ...

  7. Html5 部分帮助文档 未完待续

     W3cSchoolH5帮助文档 Video属性 视频播放效果 Video标签 src视频得目录 controls属性提供添加 播放 和音量控件 当然呢 不设置宽和高得话 视频会很大 Video还可以 ...

  8. python3编写程序,实现打印100以内的素数。

    代码如下: for x in range(2, 100): for y in range(2, x): if x % y == 0: break else: print(x, end="\t ...

  9. windows上用putty从linux上下载文件

    我之前使用putty都是直接从网上下的putty.exe,其实如果想下载windows的mis二进制文件,系统安装的话会包含,pscp.psftp.puttygen等一系列的文件. 今天下从服务器上, ...

  10. Markdown For EditPlus插件发布(基于EditPlus快速编辑Markdonw文件,写作爱好的福音来啦)

    详细介绍: Markdown For EditPlus插件使用说明 开发缘由 特点好处: 中文版使用说明 相关命令(输入字符敲空格自动输出): EditPlus常用快捷键: 相关教程: English ...