#pragma once #include #include #include namespace yaha { class CQueue { public: void append_tail(int value); int delete_head(); private: std::stack _stk_tail; std::stack _stk_head; }; class String { public: /** * 剑指 Offer 09. 用两个栈实现队列 * * @url https://leetcode.cn/leetbook/read/illustration-of-algorithm/5d3i87/ * @param s * @return */ std::string replace_space(std::string s); /** * 剑指 Offer 20. 表示数值的字符串 * * @url https://leetcode.cn/leetbook/read/illustration-of-algorithm/5d6vi6/ * @param s * @return */ bool is_number(std::string s); /** * 剑指 Offer 58 - II. 左旋转字符串 * * @url https://leetcode.cn/leetbook/read/illustration-of-algorithm/589fz2/ * @param s * @param n * @return */ std::string reverse_left_words(std::string s, int n); }; class ListNode { public: int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} /** * 剑指 Offer 06. 从尾到头打印链表 * * @url https://leetcode.cn/leetbook/read/illustration-of-algorithm/5dt66m/ * @param head * @return */ std::vector reverse_print(ListNode *head); void reverse_stack(ListNode *head, std::vector &res); void reverse(ListNode *head, std::vector &res); /** * 剑指 Offer 24. 反转链表 * * @url https://leetcode.cn/leetbook/read/illustration-of-algorithm/9pdjbm/ * @param head * @return */ ListNode *reverse_list(ListNode *head); ListNode* reverse_list(ListNode* cur, ListNode* pre); }; class Node { public: int val; Node *next; Node *random; Node(int _val) { val = _val; next = NULL; random = NULL; } /** * 剑指 Offer 35. 复杂链表的复制 * * @url https://leetcode.cn/leetbook/read/illustration-of-algorithm/9p0yy1/ * @param head * @return */ Node* copy_random_list(Node* head); }; /** * 剑指 Offer 30. 包含 min 函数的栈 * * @url: https://leetcode.cn/leetbook/read/illustration-of-algorithm/50bp33/ */ class MinStack { public: MinStack() = default; void push(int x); void pop(); int top(); int min(); private: std::stack _stk; std::stack _min_stk; }; /** * 剑指 Offer 59 - I. 滑动窗口的最大值 * * @url https://leetcode.cn/leetbook/read/illustration-of-algorithm/58o46i/ * @param nums * @param k * @return */ std::vector max_sliding_window(std::vector& nums, int k); }