12月补题记录

之前因为期末考试等原因,不少题都是CV的,现在放假了,打算一次性给补回来。其中包括12月末和1月份上旬的所有LC每日一题打卡题已经之前周赛没有复盘的题。并从今天开始会重新每日3题+每一场周赛了。
leetcode 851. 喧闹和富有 题目链接 中等
说明: 这题之前做过,重新刷一次。dfs或者拓扑排序。dfs的思路很好理解,就是利用richer建图,然后跑图,所有经过的结点都比要询问的结点有钱,比较找出最小的quiet值即可。拓扑排序和dfs正好是反过来的。建图反过来建,同时在比较的时候,最富有的人的quiet值肯定是自己,然后从大到小进行比较更新。
1610. 可见点的最大数目 题目链接 困难
说明: 这题是平面几何题。 事实上,只要知道了极角转换,排序后采用二分查找计数,就不是很困难。需要注意的是,题中需要多家360°这是因为,例如angle为5°时,-179和+179其实相距的并不远,但是如果采用二分查找,并不会都计算到一起,而加上360°吧-179°变成181°就可以了,并且因为angle的度数并不会比360,所以只会计算一次。当然,在前面就把负角度+360转正再排序也是可以的。
1611. 换酒问题 题目链接 简单题
419. 甲板上的战舰 题目链接
说明: 题目的进阶是扫一遍,o(1)的空间,然后不修改原始矩阵。直接检测战舰的左上方即可。
997. 找到小镇的法官 题目链接
说明: 统计每个人被多少个人信任,如果恰好n-1个,并且他不信任其他人即可。且只有一个,否则返回-1.
475. 供暖器 题目链接
遍历每个房子,找到离这个房子最近的前后供暖器,取两供暖器中的最小值。
1154. 一年中的第几天 题目链接简单题
686. 重复叠加字符串匹配 题目链接
说明:字符串匹配题目。 学习了Rabin-Karp算法。其实这个算法很简单,就是在匹配的时候不是逐个字母比较,而是提前计算其哈希值,类似于n进制计算哈希,这样就可以避免重复计算。同时,因为计算哈希,可能会有冲突,所以使用随机数来避免冲突。同时,值得注意的是,如果匹配的字符串必定在第一个字符串中匹配,同时,如果匹配的长度没有超过第一个字符串的长度,则直接返回1即可,否则,需要计算。计算的原理也很好理解,就是减去第一段字符串匹配的内容,然后处于a的长度用于计算需要多少a,最后再加上第一段。
此外,此题还可以使用kmp算法。虽然kmp学过,但是总是忘记,所以又跑过去做了一遍。

28 . 实现 strStr() kmp算法题目链接
背模板,关键是如何求next数组

//求next数组
vector<int>next(m);
for(int i=1,j=0;i<n;i++){
	while(j>0&&needle[i]!=needle[j])j=next[j-1];
	if(needle[i]==needle[j]) j++;
	next[i]=j;
}

//匹配过程
for(int i=0,j<0;i<n;i++){
	while(j>0&&haystack[i]!=needle[j]) j=next[j-1];
	if(haystack[i]==needle[j]) j++;
	if(j==m) return i-m+1;
}

1044 . 最长重复子串 题目链接 困难题
说明: 题意是要找到字符串中最长的重复过的字串。二分+RabinKarp算法。二分搜索重复的字符串长度,再使用RK算法进行高效检查。值得注意的是,这题可以使用unsiged long long 自动取模。这是因为相当于模了2的64次方。但我使用双哈希取模时,就很容易出错。

1705 . 吃苹果的最大数目 题目链接
贪心+堆。思想就是先吃快过期的苹果。然后使用优先队列。就是写的时候要注意,容易出错。然后离谱的是,手写pair的cmp仿生函数居然过不了,用greater<pair<int,int>>才可以过…debug了很久。
472. 连接词 题目链接 dfs+trie trie写了很多次,但是还是会忘…

上一篇:B. Repetitions Decoding 题解(思维+构造)


下一篇:CCF 2015-03