2019-09-01 20:59:55

总体感受:最近几次参加contest发现自己的水平还是严重的不够,尤其是在处理一些异常情况的时候,遇到TLE,MLE如何有效的进行Debug是需要去锻炼的。

注意点:

1)TLE,首先可以通过加上特殊判断进行解决,这个需要在实际的问题中考虑好特殊的情况,过滤掉明显不符合的解;其次可以考虑是否可以使用位运算来进行状态压缩,同时降低时间复杂度。

2)1e9 + 7不要使用long / double去规避,目前有的方法有加法每次取mod,或者使用bigInteger。

3)时间把握不够,每次写到第三题就没什么时间了。

  • 1177. Can Make Palindrome from Substring

问题描述:

问题求解:

解法一:没有考虑到k >= 13的时候直接返回True的特殊情况,导致TLE。加上特判,可以过。但是问题是这个解法的最差时间复杂度是O(mn)。

    public List<Boolean> canMakePaliQueries(String s, int[][] queries) {
List<Boolean> res = new ArrayList<>();
char[] chs = s.toCharArray();
for (int[] q : queries) {
res.add(helper(chs, q[0], q[1], q[2]));
}
return res;
} private boolean helper(char[] chs, int s, int e, int k) {
if (k >= 13) return true;
Set<Character> set = new HashSet<>();
for (int i = s; i <= e; i++) {
char c = chs[i];
if (!set.add(c)) set.remove(c);
}
return set.size() / 2 <= k;
}

解法二:比较好的解法是维护一个前缀和,记录前缀的字符出现的次数,之后在查询的时候就不需要再遍历s了,时间复杂度可以降到O(m)。

    public List<Boolean> canMakePaliQueries(String s, int[][] queries) {
List<Boolean> ans = new ArrayList<>();
int[][] cnt = new int[s.length() + 1][26];
for (int i = 0; i < s.length(); ++i) {
cnt[i + 1] = cnt[i].clone(); // copy previous sum.
++cnt[i + 1][s.charAt(i) - 'a'];
}
for (int[] q : queries) {
int sum = 0;
for (int i = 0; i < 26; ++i) {
sum += (cnt[q[1] + 1][i] - cnt[q[0]][i]) % 2;
}
ans.add(sum / 2 <= q[2]);
}
return ans;
}
  • 1178. Number of Valid Words for Each Puzzle

问题描述:

问题求解:

解法一:BF,TLE。

    public List<Integer> findNumOfValidWords(String[] words, String[] puzzles) {
List<Integer> res = new ArrayList<>();
int n = words.length;
int m = puzzles.length;
int[][] freqw = new int[n][26];
int[][] freqq = new int[m][26];
for (int i = 0; i < n; i++) {
for (char c : words[i].toCharArray()) {
freqw[i][c - 'a']++;
}
}
for (int i = 0; i < m; i++) {
for (char c : puzzles[i].toCharArray()) {
freqq[i][c - 'a']++;
}
}
for (int i = 0; i < m; i++) {
res.add(helper(freqq[i], puzzles[i].charAt(0), freqw, n));
}
return res;
} private int helper(int[] freq, char c, int[][] freqw, int n) {
int res = 0;
for (int i = 0; i < n; i++) {
if (freqw[i][c - 'a'] == 0) continue;
if (isvalid(freq, freqw[i])) res++;
}
return res;
} private boolean isvalid(int[] freq, int[] freqw) {
for (int i = 0; i < 26; i++) {
if (freqw[i] != 0 && freq[i] == 0) return false;
}
return true;
}  

解法二:

本题的考点是位运算,可以使用位运算进行状态的压缩,另外单纯知道位运算进行状态压缩还是会TLE。

需要考虑到puzzles的长度仅仅只有7,也就是说状态压缩之后其subset只有2 ^ 7 = 128种状态,如果直接遍历words的状压的map,会TLE,但是如果遍历puzzle的subset时间复杂度就会降低很多。

二进制求subset也是本题的核心考点。

    public List<Integer> findNumOfValidWords(String[] words, String[] puzzles) {
List<Integer> res = new ArrayList<>();
Map<Integer, Integer> map = new HashMap<>();
for (String word : words) {
int mask = 0;
for (char c : word.toCharArray()) {
mask |= 1 << c - 'a';
}
map.put(mask, map.getOrDefault(mask, 0) + 1);
}
for (String puzzle : puzzles) {
int sum = 0;
int mask = 0;
int start = 1 << puzzle.charAt(0) - 'a';
for (char c : puzzle.toCharArray()) {
mask |= 1 << c - 'a';
}
for (int s = mask; s > 0; s = (s - 1) & mask) {
if (map.containsKey(s) && (s & start) == start) sum += map.get(s);
}
res.add(sum);
}
return res;
}

  

Contest 152的更多相关文章

  1. Leetcode Weekly Contest 152

    退役老人现在连leetcode都不会做了 = = 今天早上做了leetcode第三题题目看错了,加上比赛中间还在调投稿的实验,一心二用直接gg 总结下教训就是 本渣现在做题连题目都看不清就开始做.开始 ...

  2. Mergeable Stack 直接list内置函数。(152 - The 18th Zhejiang University Programming Contest Sponsored by TuSimple)

    题意:模拟栈,正常pop,push,多一个merge A B 形象地说就是就是将栈B堆到栈A上. 题解:直接用list 的pop_back,push_back,splice 模拟, 坑:用splice ...

  3. 152 - - G Traffic Light 搜索(The 18th Zhejiang University Programming Contest Sponsored by TuSimple )

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5738 题意 给你一个map 每个格子里有一个红绿灯,用0,1表示 ...

  4. 2015 Multi-University Training Contest 6 solutions BY ZJU(部分解题报告)

    官方解题报告:http://bestcoder.hdu.edu.cn/blog/2015-multi-university-training-contest-6-solutions-by-zju/ 表 ...

  5. 2014 ACM-ICPC Beijing Invitational Programming Contest

    点击打开链接 Happy Reversal Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      J ...

  6. 2015 Multi-University Training Contest 1 Assignment

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  7. Benelux Algorithm Programming Contest 2014 Final(第二场)

    B:Button Bashing You recently acquired a new microwave, and noticed that it provides a large number ...

  8. 「CometOJ」Contest #11

    Link Aeon 显然字典序最大就是把最小的字母放在最后 Business [动态规划] 简单dp dp[i][j]dp[i][j]dp[i][j]表示到第iii天,当前有jjj块钱,最后返还的钱最 ...

  9. Programming Contest Problem Types

        Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...

随机推荐

  1. 创建Cocoapods私有库

    本文以自己在公司做的一个手势密码私有库GesturePasswordKit为例说明. 1.在gitlab(或者github,我这里使用的例子是在gitlab上)上创建git仓库 (确保授权正确,避免后 ...

  2. 《软件自动化测试开发-Java和Python测试开发指南》第6次印刷

    2017年1月 第1次印刷 2017年5月 第2次印刷 2017年9月 第3次印刷 2017年11月 第4次印刷 2018年4月 第5次印刷 2018年6月 第6次印刷 欢迎留言,点赞前2名,可获2折 ...

  3. docker学习读书笔记-一期-整理

    0.Docker - 第零章:前言 1.Docker - 第一章:Docker简介 2.Docker - 第二章:第一个Docker应用 3.Docker - 第三章:Docker常用命令 4.Doc ...

  4. 通俗易懂DenseNet

    目录 写在前面 Dense Block与Transition Layer DenseNet网络架构与性能 理解DenseNet Plain Net.ResNet与DenseNet 参考 博客:博客园 ...

  5. 原创:Python爬虫实战之爬取美女照片

    这个素材是出自小甲鱼的python教程,但源码全部是我原创的,所以,猥琐的不是我 注:没有用header(总会报错),暂时不会正则表达式(马上要学了),以下代码可能些许混乱,不过效果还是可以的. 爬虫 ...

  6. 【C#】WechatPay-API-v3 使用平台证书加密内容与应答|通知验签(SHA256 with RSA)

    官方暂时没有维护应答与通知签名的验证C#示例,找了些资料被困扰了一天终于调试通了,贴出来下 . 此类提供两个方法: 1.敏感信息加密,如身份证.银行卡号.(特约商户进件接口需要): 2.应答与通知签验 ...

  7. 从头认识js-js中的对象

    什么是对象? ECMA-262中把对象定义为:“无序属性的集合,其属性可以包含基本值,对象或者函数”.严格来讲,对象是一组没有特定顺序的值.对象的每个属性或方法·都有一个名字,而每个名字都映射到一个值 ...

  8. removeAttribute getAttribute setAttribute

    1.removeAttribute() 方法删除指定的属性. 注:removeAttributeNode() 方法从元素中删除指定的属性节点.简单的来讲,removeAttribute() 移除元素内 ...

  9. 三个值得期待的JavaScript新功能!

    让我们来看看JavaScript中一些有用的即将推出的功能.您将看到他们的语法,链接以及时了解他们的进度,我们将编写一个小型测试套件,以展示如何立即开始使用这些提案! JavaScript是如何更新迭 ...

  10. 前端每日实战:4# 视频演示如何用纯 CSS 创作一个金属光泽 3D 按钮特效

    效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/full/MGeRRO 可交互视频教程 此视频是可以 ...