# Leetcode 能力 check!
## C++ 技巧
- [ ] **容器(Containers)**
<details>
<summary>內容</summary>
- [ ] `vector` [check List 連結](https://hackmd.io/@DSArecorder/HyJQvoM5A)
- [ ] `queue`
- [ ] `priority_queue`
- [ ] `deque` [check List 連結](https://hackmd.io/@DSArecorder/H1dR9oGcA)
- [ ] `list`
- [ ] `forward_list`
- [ ] `array`
- [ ] `set`
- [ ] `unordered_set`
- [ ] `map`
- [ ] `unordered_map`
- [ ] `multiset`
- [ ] `multimap`
- [ ] `pair`
- [ ] `bitset`
</details>
- [ ] **演算法(Algorithms)**
<details>
<summary>內容</summary>
- [ ] `sort` [Cplusplus](https://www.cplusplus.com/reference/algorithm/sort/)
- [ ] `find` [Cplusplus](https://www.cplusplus.com/reference/algorithm/find/)
- [ ] `binary_search` [Cplusplus](https://www.cplusplus.com/reference/algorithm/binary_search/)
- [ ] `count` [Cplusplus](https://www.cplusplus.com/reference/algorithm/count/)
- [ ] `reverse` [Cplusplus](https://www.cplusplus.com/reference/algorithm/reverse/)
- [ ] `shuffle` ("Shuffle" 是一個英語動詞,主要指將一組東西打亂或重新排列。) [Cplusplus](https://www.cplusplus.com/reference/algorithm/shuffle/)
- [ ] `accumulate` [Cplusplus](https://www.cplusplus.com/reference/numeric/accumulate/)
- [ ] `for_each` [Cplusplus](https://www.cplusplus.com/reference/algorithm/for_each/)
- [ ] `transform` [Cplusplus](https://www.cplusplus.com/reference/algorithm/transform/)
</details>
- [ ] **迭代器(Iterators)**
<details>
<summary>內容</summary>
- [ ] `iterator`
- [ ] `const_iterator`
- [ ] `reverse_iterator`
- [ ] `back_inserter`
- [ ] `front_inserter`
- [ ] `inserter`
</details>
- [ ] **函式物件(Function Objects)**
<details>
<summary>內容</summary>
- [ ] `std::function`
- [ ] `std::bind`
- [ ] `std::bind2nd`
- [ ] `std::bind1st`
- [ ] `std::less`
- [ ] `std::greater`
</details>
- [ ] **智能指標(Smart Pointers)**
<details>
<summary>內容</summary>
- [ ] `std::unique_ptr`
- [ ] `std::shared_ptr`
- [ ] `std::weak_ptr`
</details>
- [ ] **其他**
<details>
<summary>內容</summary>
- [ ] `tuple`
- [ ] `optional`
- [ ] `variant`
- [ ] `any`
</details>
## 演算法技巧
1. Sliding Window
1. left 是 sliding window 的 left boundary。
2. window_sum 用於儲存目前 sliding window 內元素的總和。
3. result 用於保存目前為止找到的最大總和。
```cpp!=
#include <iostream>
#include <vector>
#include <algorithm>
int slidingWindow(const std::vector<int>& nums, int k) {
int left = 0;
int window_sum = 0;
int result = 0;
// Slide the right boundary of the window across the array
for (int right = 0; right < nums.size(); ++right) {
// Add the current element to the window sum
window_sum += nums[right];
// If the window size exceeds k, shrink the window from the left
if (right - left + 1 > k) {
window_sum -= nums[left];
++left;
}
// Update the result with the maximum sum found so far
result = std::max(result, window_sum);
}
return result;
}
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int k = 3;
std::cout << "Max sum of subarray of size " << k << " is " << slidingWindow(nums, k) << std::endl;
return 0;
}
```
## reference
1. [從零開始的競程介紹](https://hackmd.io/@LittlePants/Hyw_rueGK)
2. [【心得】講一些CPE、leetcode還有刷題的事情](https://forum.gamer.com.tw/C.php?bsn=60292&snA=8383)
3. [leetcode-master](https://github.com/youngyangyang04/leetcode-master?tab=readme-ov-file)
4. [LeetCode 刷1500題心路歷程](https://ikaminyou.medium.com/leetcode-%E5%88%B71500%E9%A1%8C%E5%BF%83%E8%B7%AF%E6%AD%B7%E7%A8%8B-8614284f03da)
5. [leetcode_problem_rating](https://zerotrac.github.io/leetcode_problem_rating/#/)