update content

This commit is contained in:
labuladong 2023-04-05 18:14:45 +08:00
parent e487aca70c
commit 6c845ac30d
2 changed files with 3 additions and 2 deletions

View File

@ -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 皇后问题的所有具体结果,而仅仅问你共有几种解法,应该怎么做呢?

View File

@ -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 上速度不够快。