LeetCode 42. 接雨水(难) 用栈来跟踪可能储水的最长的条形块。使用栈就可以在一次遍历内完成计算。我们在遍历数组时维护一个栈。如果当前的条形块小于或等于栈顶的条形块,我们将条形块的索引入栈,意思是当前的条形块被栈中的前一个条形块界定。如果我们发现一个条形块长于栈顶,我们可以确定栈顶的条形块被当前条形块和栈的前一个条形块界定,因此我们可以弹出栈顶元素并且累加答案到 ans 。 2020-03-10 LeetCode 栈和队列
LeetCode 41. 缺失的第一个正数(难) 一致输入数组长度为 n ,那么,大于 n 的数字,就肯定不是未出现的最小正整数。现在我们有一个只包含正数的数组,范围为 1 到 n,现在的问题是在 \(O(N)\) 的时间和常数空间内找出首次缺失的正数。如果可以使用哈希表,且哈希表的映射是 正数 -> 是否存在 的话,这其实很简单。"脏工作环境" 的解决方法是将一个字符串 hash_str 分配 n 个 0,并且用类似于哈希表的方法,如果在 2020-03-09 LeetCode 字符串与哈希表
LeetCode 40. 组合总和 II(中) 如何去掉一个数组中重复的元素,除了使用哈希表以外,我们还可以先对数组升序排序,重复的元素一定不是排好序以后的第 1 个元素和相同元素的第 1 个元素。根据这个思想,我们先对数组升序排序是有必要的。候选数组有序,对于在递归树中发现重复分支,进而“剪枝”也是有效的。 2020-03-09 LeetCode 回溯算法