update content
This commit is contained in:
parent
e487aca70c
commit
6c845ac30d
|
|
@ -337,7 +337,7 @@ bool backtrack(vector<string>& board, int row) {
|
|||
}
|
||||
```
|
||||
|
||||
这样修改后,只要找到一个答案,for 循环的后续递归穷举都会被阻断。也许你可以在 N 皇后问题的代码框架上,稍加修改,写一个解数独的算法?可以参考我的这篇文章 [回溯算法秒杀数独问题](https://labuladong.github.io/article/fname.html?fname=sudoku)。
|
||||
这样修改后,只要找到一个答案,后续的递归穷举都会被阻断。也许你可以在 N 皇后问题的代码框架上,稍加修改,写一个解数独的算法?可以参考我的这篇文章 [回溯算法秒杀数独问题](https://labuladong.github.io/article/fname.html?fname=sudoku)。
|
||||
|
||||
再简单拓展一下,有可能题目不需要你计算出 N 皇后问题的所有具体结果,而仅仅问你共有几种解法,应该怎么做呢?
|
||||
|
||||
|
|
|
|||
|
|
@ -70,6 +70,7 @@ while (right < s.size()) {
|
|||
```cpp
|
||||
/* 滑动窗口算法框架 */
|
||||
void slidingWindow(string s) {
|
||||
// 用合适的数据结构记录窗口中的数据
|
||||
unordered_map<char, int> window;
|
||||
|
||||
int left = 0, right = 0;
|
||||
|
|
@ -106,7 +107,7 @@ void slidingWindow(string s) {
|
|||
|
||||
另外,虽然滑动窗口代码框架中有一个嵌套的 while 循环,但算法的时间复杂度依然是 `O(N)`,其中 `N` 是输入字符串/数组的长度。
|
||||
|
||||
为什么呢?简单说,字符串/数组中的每个元素都只会进入窗口一次,然后被移出窗口一次,不会说有某些元素多次进入和离开窗口,所以算法的时间复杂度就和字符串/数组的长度成正比。前文 [算法时空复杂度分析实用指南](https://labuladong.github.io/article/fname.html?fname=时间复杂度) 有具体讲时间复杂度的估算,这里就不展开了。
|
||||
为什么呢?简单说,指针 `left, right` 不会回退(它们的值只增不减),所以字符串/数组中的每个元素都只会进入窗口一次,然后被移出窗口一次,不会说有某些元素多次进入和离开窗口,所以算法的时间复杂度就和字符串/数组的长度成正比。前文 [算法时空复杂度分析实用指南](https://labuladong.github.io/article/fname.html?fname=时间复杂度) 有具体讲时间复杂度的估算,这里就不展开了。
|
||||
|
||||
说句题外话,我发现很多人喜欢执着于表象,不喜欢探求问题的本质。比如说有很多人评论我这个框架,说什么散列表速度慢,不如用数组代替散列表;还有很多人喜欢把代码写得特别短小,说我这样代码太多余,影响编译速度,LeetCode 上速度不够快。
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue