378

1.之前有类似的题目可以参考,其实这道题就典型的二分查找,关键函数如下:
bool check(vector<vector<int>>& matrix, int mid, int k, int n) {
int i = n - 1;
int j = 0;
int num = 0;
while (i >= 0 && j < n) {
if (matrix[i][j] <= mid) {
num += i + 1;
j++;
} else {
i--;
}
}
return num >= k;
}
380

1.这道题也算是老朋友了,很显然,hash+list就能完成这件事情。首先,hash的话无序存放和查找,直接满足前两个要求,而最后的随机抽查,就靠list。
2.哈希的first存放的是数值,second存放的是指针指向这个链表对象。插入时,list直接在末尾追加即可,不需要排序之类的。删除的话借助这个second指针删除起来也很爽。
3.还是建议搞个fake_head and fake_tail
382

1.挺有趣的一道题目,概率相等。其实说白了,这道题就是我前段时间写过的在system design里说到过的,这里就不说了。
384

1.就是这种越简单的题目越有趣。
2. Fisher-Yates 洗牌算法。我收回我说的话,这道题暂时先不看。
386

1.dfs,这还有啥好说的,pass!
390

1.很典型的dp对吧,计算f(n)的时候,先自己模拟刷一趟,(当然没必要真实模拟,这个东西完全可以直接计算出来,index=0的时候对应的值是多少,index=1的时候对应的值是多少,诸如此类。)
395

1.这道题很明显是递归了,遍历一遍后,找到不合格的家伙,统计它的下标,然后直接将原数组一分为二,继续搞下去。
2.对,没必要一次赶尽杀绝,只要有一个就好。
这篇博客记录了作者在LeetCode刷题的第15天,涉及题目包括378、380、382、384、386、390和395。378题使用了二分查找,380题利用哈希和链表实现特定功能,382题为概率相等的问题,384题应用了Fisher-Yates洗牌算法,386题通过深度优先搜索解决,390题采用动态规划,395题则使用递归策略。

361

被折叠的 条评论
为什么被折叠?



