1. 第一题

看完题目后,肯定先对houses和heaters排序,然后考虑贪心可以么,我那时候没有想出来,然后看到可以O(n)的判断一个半径是否满足要求,就对半径[0,1e9]进行二分,然后就a了。

其实,排完序可以进行贪心,对每一个houses,找到最近的heaters,左右2边的,求最小,这个可以通过二分来做,然后不断更新结果,求出最小值的最大值,这应该算是正常的解法。

我认为应该算是medium,easy难度设的有点低。

2. 第二题

字符串题目,其实看到这题,我是不大乐意的,因为这题需要考虑各种边界条件,而我写出的代码也是比较丑的。

这题没有什么套路,直接考虑说明中各种边界条件就可以了。

3.第三题

找了例子写了一下,发现贪心不行,因为不知道0和1,应该尽可能的使用哪一个,然后统计个数,忽略每个字符串01的顺序,然后考虑dp。就是每个每个字符串选还是不选,结果的最大值,简单的背包问题。

注意从大到小更新,搞清楚转移方程。

4.第四题

一看题目,完全懵逼,根本无从下手。我一般先做可以出结果的题目,这次的先做2,3题,看到第四题,感觉不行,就写1题,写完再看了看第四题,就直接放弃了。

题解看的这里:

http://bookshadow.com/weblog/2016/12/11/leetcode-encode-string-with-shortest-length/

分析的很棒,我不知道怎么分析复杂度。看题目的时候,长度只有160,发现n^2的复杂度也不会超时,但是没思路。

想起来,跟 411 Minimum Unique Word Abbreviation 差不多。

根据上面的题解,写的代码。

 class Solution {
public:
map<string, string> ma;
//string encode(string s);
string work(string s) {
string res = s;
int n = s.size();
for (int i = ; i <= n / ; i++) {
bool f = ;
if(n % i != ) continue;
for (int j = ; j < s.size(); j++) {
if(s[j] != s[j % i]) {
f = ;
break;
}
}
if(f) {
stringstream s1;
s1 << n / i << '[' << encode(s.substr(, i)) << ']';
string t = s1.str();
if(t.size() < res.size()) res = t;
}
}
return res;
}
string encode(string s) {
int n = s.size();
if(n <= ) return s;
if(ma.count(s)) return ma[s];
string res = s;
for (int i = ; i <= s.size(); i++) {
string left = s.substr(, i), right = s.substr(i);
string t = work(left) + encode(right);
if(res.size() > t.size()) res = t;
}
return ma[s] = res;
}
};

其实可以写一下当初为什么没有想法,或者是有一点想法,不知道怎么下手,或者有什么疑问。

问题一:怎么处理循环几次的问题,不知道怎么考虑,要用什么后缀树,前缀树处理么?其实,这个过程是要通过枚举来处理,枚举切分长度,然后判读是否是这个长度的的重复串。真的,这个问题之前真的不知道怎么处理!

问题二:中括号里面的编码怎么处理,其实这里猜也可以猜到:递归调用encode

问题三:怎么处理需要编码和不需要编码的部分,就是上面代码的33行的处理部分,这个怎么分析出来的。

问题四:上面这样搞的复杂度是多少,1s的时限内是否可以运行完毕,这些都是需要考虑的!

反正,就上面这么多疑问,下次遇到类似的问题的时候,应该知道怎么下手吧!

LeetCode Weekly Contest 12的更多相关文章

  1. LeetCode Weekly Contest 8

    LeetCode Weekly Contest 8 415. Add Strings User Accepted: 765 User Tried: 822 Total Accepted: 789 To ...

  2. leetcode weekly contest 43

    leetcode weekly contest 43 leetcode649. Dota2 Senate leetcode649.Dota2 Senate 思路: 模拟规则round by round ...

  3. LeetCode Weekly Contest 23

    LeetCode Weekly Contest 23 1. Reverse String II Given a string and an integer k, you need to reverse ...

  4. Leetcode Weekly Contest 86

    Weekly Contest 86 A:840. 矩阵中的幻方 3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等. 给定一个 ...

  5. 【LeetCode Weekly Contest 26 Q2】Longest Uncommon Subsequence II

    [题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/longest-uncommon-subsequence ...

  6. LeetCode Weekly Contest

    链接:https://leetcode.com/contest/leetcode-weekly-contest-33/ A.Longest Harmonious Subsequence 思路:hash ...

  7. 【LeetCode Weekly Contest 26 Q4】Split Array with Equal Sum

    [题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/split-array-with-equal-sum/ ...

  8. 【LeetCode Weekly Contest 26 Q3】Friend Circles

    [题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/friend-circles/ [题意] 告诉你任意两个 ...

  9. 【LeetCode Weekly Contest 26 Q1】Longest Uncommon Subsequence I

    [题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/longest-uncommon-subsequence ...

随机推荐

  1. 性能监视器(SSAS)

    使用性能监视器,您可以通过性能计数器监视 Microsoft SQL Server Analysis Services (SSAS) 实例的性能. 性能监视器是用于跟踪资源使用情况的 Microsof ...

  2. 纯css3实现的动画加载条

    之前大大家分享了很多款加载条.今天给大家带来一款纯css3实现的动画加载条. 这款加载条适用浏览器:360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 不支持IE8 ...

  3. js获得控件位置

    网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...

  4. debian7 编译qtopia错误解决案例

    问题: kernel/qjpegio.cpp:60:21: error: jpeglib.h: No such file or directory 解决 sudo apt-get install li ...

  5. 使用get方式提交数据

    get提交代码 import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLE ...

  6. .net对各表的操作详细到字段的更改记录的日志

    存入数据库中,目前的字段包括操作人,操作时间,sql语句,被修改的字段,字段原值,操作人的身份. /// <summary> /// 添加操作日志 /// </summary> ...

  7. [算法练习]最长公共子串(LCS)

    题目说明: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的.比如"bab"和"caba"的最长公共子串是"ba"和" ...

  8. 【Shell脚本学习10】Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等

    Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最 ...

  9. Java学习笔记——单例设计模式Singleton

    单例设计模式:singleton 解决的问题: 确保程序在运行过程中,某个类的实例instance只有一份. 特点: 1 构造函数私有化 2 自己内部声明自己 3 提供一个public方法,负责实例化 ...

  10. uboot在s3c2440上的移植(2)

    一.移植环境 主  机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-b ...