摘要:
用dp[i]记录以nums[i]结尾的最长上升子序列的长度。 遍历数组,对于一个数,从开头遍历到这个数的前一个数,如果存在一个(0 ⇐ j ⇐ i - 1),nums[j] < nums[i] 且 dp[j] > 1, 则可以考虑更新dp[i] → dp[i] = max(dp[i], dp[j] 阅读全文
posted @ 2020-08-27 17:33
machine_gun_lin
阅读(131)
评论(0)
推荐(0)
摘要:
先同时遍历两个数组,计算相同位置上相同的字母个数,记为cntA。 在遍历的同时,如果相同位置上两个字母不同,就在一个哈希表unordered_map<char, int>上记录不同的数字(在字符串secret)出现的次数。 然后遍历guess数组,用一个变量cntB记录出现在秘密数字中,但位置不一致 阅读全文
posted @ 2020-08-27 17:21
machine_gun_lin
阅读(164)
评论(0)
推荐(0)
摘要:
暴力做法是维护一个数组,每次插入一个元素就对数组进行排序,然后通过有序数组寻找中位数就很简单了。 但是因为每次插入一个元素都要对数组进行排序,调整的时间代价太大了,超时。 我们可以用两个优先级队列,一个小根堆,一个大根堆分别存储大于等于和小于当前中位数的所有数。 且小根堆的大小总是和大根堆的大小相等 阅读全文
posted @ 2020-08-27 16:36
machine_gun_lin
阅读(94)
评论(0)
推荐(0)
摘要:
找规律的题目,对于1, 2, 3块石头,由于我们可以一次拿走,所以必赢。 而如果是4块石头,不管我们拿多少块(1、2、3),最会剩下1~3块,使得对手可以一次拿走,所以必输。 我们管n=1,2,3叫必胜态,n=4叫必败态。 注意到,一个必败态的n加上1,2,3,又变成了必胜态。比如n=5,6,7的时 阅读全文
posted @ 2020-08-27 15:46
machine_gun_lin
阅读(75)
评论(0)
推荐(0)
摘要:
可以用两个哈希表分别记录pattern到str(即字母到单词)和str到pattern(即单词到字母)的映射。 然后检查两个哈希表中的记录,比如某个字母之前已经映射到某个单词,但存在和这个映射矛盾的映射(字母映射到别的单词), 或者是存在某个矛盾的从单词到字母的映射,就返回false。 否则,遍历完 阅读全文
posted @ 2020-08-27 15:36
machine_gun_lin
阅读(106)
评论(0)
推荐(0)
摘要:
可以直接额外写一个函数count计算周围每个格子周围八个位置中活细胞的数目,再根据当前位置是活细胞还是死细胞以及周围 活细胞的数目更新当前位置board的值。 class Solution { public: vector<vector<int>> g; int rows, cols; int dx 阅读全文
posted @ 2020-08-27 15:25
machine_gun_lin
阅读(78)
评论(0)
推荐(0)
摘要:
因为所有数字都在1n之间,所以我们可以枚举1n,然后再遍历nums数组看一下是不是有数字出现次数超过1次。 这样时间复杂度是O(n^2),还可以优化。 考虑这样一种情况,如果每个数字x(1<=x<=n)在数组里出现次数超过1次,则我们遍历数组的时候计算所有小于等于x的 数的个数cnt,cnt必然大于 阅读全文
posted @ 2020-08-27 14:42
machine_gun_lin
阅读(162)
评论(0)
推荐(0)
摘要:
这题给的类原型里PeekingIterator类公有继承自类Iterator,所以我们可以调用基类的next()和hasNext()方法。 虽然在class Iterator里只对next()和hasNext()方法做了声明,但是实际上类外肯定对这两个方法做了实现,所以我们 是可以直接调用Itera 阅读全文
posted @ 2020-08-27 14:17
machine_gun_lin
阅读(158)
评论(0)
推荐(0)
摘要:
双指针,用两个指针zero和nonZero分别找到一个为0和一个不为0的数,且如果不为0的数在为0的数后面,则交换这两个数。 如果在0的前面,则不用交换,zero指针不动,nonZero从zero指针的下一个位置开始寻找一个不为0的数,与zero指针交换。 重复这个过程,直到两个指针其中之一越界。 阅读全文
posted @ 2020-08-27 13:39
machine_gun_lin
阅读(106)
评论(0)
推荐(0)

浙公网安备 33010602011771号