day1

剑指 Offer 09. 用两个栈实现队列 - 力扣(LeetCode)

class CQueue {private:    stack<int> PUSH;    stack<int>POP;public:    void appendTail(int value) {        PUSH.push(value);    }        int deleteHead() {        if(POP.empty())        {            int x = 0;            while(!PUSH.empty())            {                x = PUSH.top();                POP.push(x);                PUSH.pop();            }        }        if(POP.empty())return -1;        int x = POP.top();        POP.pop();        return x;    }};

剑指 Offer 30. 蕴含min函数的栈 - 力扣(LeetCode)

class MinStack {private:    stack<int>st;    stack<int>_min;public:   void push(int x) {       st.push(x);       if(_min.empty() || _min.top()>=x)        _min.push(x);    }        void pop() {        int x = st.top();        st.pop();        if(x == _min.top())        {            _min.pop();        }    }        int top() {        return st.top();    }      int min() {        return _min.top();    }};

day2

剑指 Offer 06. 从尾到头打印链表 - 力扣(LeetCode)

class Solution {public:    vector<int> reversePrint(ListNode* head) {        ListNode *t = head;        stack<int>st;        vector<int>v;        while(t != nullptr)        {            st.push(t->val);            t = t->next;        }        while(!st.empty())        {            int x = st.top();            v.push_back(x);            st.pop();        }        return v;    }};

剑指 Offer 24. 反转链表 - 力扣(LeetCode)

class Solution {public:    ListNode* reverseList(ListNode* head) {        stack<int>st;        ListNode *t = head;             while(t!=nullptr)        {            st.push(t->val);            t = t->next;        }                ListNode *h = new ListNode;        h ->next = NULL;        h ->val = 0;        t = h;          while(!st.empty()) {            int x = st.top();            st.pop();                        ListNode *temp = new ListNode;            temp->next = NULL;                       temp->val = x;            t->next = temp;            t = temp;        }        return h->next;    }};

剑指 Offer 35. 简单链表的复制 - 力扣(LeetCode)

class Solution {public:    Node* copyRandomList(Node* head)     {        Node*t = head;                unordered_map<Node*,Node*> m;        while(t != nullptr)        {            m[t] = new Node(t->val);            t = t->next;        }        t = head;        while(t!=nullptr)        {            m[t] ->next = m[t->next];            m[t] ->random = m[t->random];            t = t->next;        }        return m[head];    }  };

day3

剑指 Offer 05. 替换空格 - 力扣(LeetCode)

class Solution {public:    string replaceSpace(string s) {        string ans;        for(auto x : s)        {            if(x == ' ')                ans += "%20";            else                ans += x;        }        return ans;    }  };//cout<<typeid(x).name()<<endl;得悉x的类型是char

剑指 Offer 58 - II. 左旋转字符串 - 力扣(LeetCode)

class Solution {public:    string reverseLeftWords(string s, int n) {        string s1 = s.substr(0,n);        string s2 = s.substr(n);        s  = s2 + s1;        return s;     }};

day4

剑指 Offer 03. 数组中反复的数字 - 力扣(LeetCode)

class Solution {public:    int findRepeatNumber(vector<int>& nums) {        int count[100006] = {0};        for(auto x:nums)        {            ++count[x];            if(count[x]>1)            {                return x;            }        }        return -1;    }};

剑指 Offer 53 - I. 在排序数组中查找数字 I - 力扣(LeetCode)

class Solution {public:    int search(vector<int>& nums, int target) {        int ans = 0;        int pos = lower_bound(nums.begin(),nums.end(), target) - nums.begin();        cout<<pos<<endl;        while(pos != nums.size())        {            if(nums[pos] == target)            {                ++ans;            }            ++pos;        }        return ans;    }};//留神这个函数返回的pos是下标,而不是迭代器

剑指 Offer 53 - II. 0~n-1中缺失的数字 - 力扣(LeetCode)

class Solution {public:    int missingNumber(vector<int>& nums) {        int ans = 0;        for(int i = 0; i <= nums.size(); ++i)        {            if(i != nums[i])            {                ans = i;                break;            }        }        return ans;    }};

day5

剑指 Offer 04. 二维数组中的查找 - 力扣(LeetCode)

class Solution {public:    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {        int i = 0;        for(; i < matrix.size(); ++i)        {            auto it = lower_bound(matrix[i].begin(), matrix[i].end(), target);            if(it != matrix[i].end()&&*it == target)//返回的it也可能是野指针,咱们不能拜访野指针                break;        }        if(i < matrix.size())            return true;        return false;    }   };

剑指 Offer 11. 旋转数组的最小数字 - 力扣(LeetCode)

class Solution {public:    int minArray(vector<int>& numbers) {        sort(numbers.begin(),numbers.end());        return numbers[0];    }};

剑指 Offer 50. 第一个只呈现一次的字符 - 力扣(LeetCode)

class Solution {public:    char firstUniqChar(string s) {        unordered_map<char, int> kv;        for(auto x:s)        {            kv[x]++;        }        for(auto x:s)        {            if(kv[x] == 1)            {                return x;            }        }        return ' ';            }};

day6

剑指 Offer 32 - I. 从上到下打印二叉树 - 力扣(LeetCode)

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<int> levelOrder(TreeNode* root) {        queue<TreeNode*>q;        vector<int>ans;        if(root)q.push(root);        while(!q.empty())        {            TreeNode* t = q.front();            if(t)                ans.push_back(t->val);            q.pop();            if(t->left)q.push(t->left);            if(t->right)q.push(t->right);        }        return ans;    }};

剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(LeetCode)

class Solution {public:    vector<vector<int>> levelOrder(TreeNode* root) {        queue<TreeNode*>q;        vector<vector<int>>ans;              if(root)q.push(root);                while(!q.empty())        {            int size = q.size();            vector<int> temp;            for(int i=0;i<size;++i)            {                TreeNode* t = q.front();                    q.pop();                            temp.push_back(t->val);                 if(t->left)q.push(t->left);                if(t->right)q.push(t->right);            }            ans.push_back(temp);        }        return ans;    }};

剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(LeetCode)

class Solution {public:    vector<vector<int>> levelOrder(TreeNode* root) {        queue<TreeNode*>q;        vector<vector<int>>ans;        bool f = false;        if(root)q.push(root);                while(!q.empty())        {            int size = q.size();            vector<int> temp;            for(int i=0;i<size;++i)            {                TreeNode* t = q.front();                    q.pop();                            temp.push_back(t->val);                 if(t->left)q.push(t->left);                if(t->right)q.push(t->right);            }            if(f==true)reverse(temp.begin(),temp.end());            ans.push_back(temp);            f = !f;        }        return ans;    }};