二刷剑指offer
Huzy_cx
这个作者很懒,什么都没留下…
展开
-
剑指二刷35:复杂链表的复制
题目 题解: 一刷时采用的是《剑指offer》中,在原链表中插入新复制的节点,从而在复制random节点时,不需要开辟额外的辅助空间。 复制节点,并将复制的节点插入原来的链表中。 将新节点的random节点复制给新的节点。 时间复杂度:O(n) 空间复杂度:O(1) /* // Definition for a Node. class Node { public: int val; Node* next; Node* random; Node(int _va原创 2020-08-27 16:04:21 · 115 阅读 · 0 评论 -
剑指二刷24:反转链表(双指针/递归)
题目: 题解1: 在一刷时采用双指针(加一个临时指针)的方法,不耗费额外空间。 时间复杂度:O(n) 空间复杂度:O(1) 代码: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { pub转载 2020-08-27 10:34:56 · 165 阅读 · 1 评论 -
剑指二刷05:替换空格
题目: 题解1: 正常思路,不考虑空间复杂度,重新开一个string,碰到space就加一个“%20”。 时间复杂度:O(n) 空间复杂度:O(n) 题解2: 在原本的字符串上做修改,resize扩容后,从尾部开始复制,不会消除前面的元素。 时间复杂度:O(n) 空间复杂度:O(1) 代码: class Solution { public: string replaceSpace(string s) { int len = s.size(); .原创 2020-08-26 23:17:40 · 94 阅读 · 0 评论 -
剑指二刷04:二维数组中的查找
题目: 题解1:暴力 最无脑的解法,遍历一遍二维数组,看看有没有相同的值。 时间复杂度:O(n*m) 空间复杂度:O(1) 题解2:线性查找 从二维数组的右上角开始查找。如果当前元素等于目标值,则返回true。如果当前元素大于目标值,则移到左边一列。如果当前元素小于目标值,则移到下边一行。 时间复杂度:O(n+m) 空间复杂度:O(1) 代码: class Solution { public: bool findNumberIn2DArray(vector<..原创 2020-08-26 10:38:27 · 135 阅读 · 0 评论 -
剑指二刷03:重复数字
题目: 题解: 首先查重复元素数量,第一反应是使用set集合,方法简单易懂,通用性强。 时间复杂度:时间复杂度为O(n),数组需要遍历一遍,set添加元素的时间为O(1),查找一个数的时间为O(logn)。 空间复杂度:O(n),需要使用set存已经读取的数。 代码: ...原创 2020-08-26 10:24:21 · 126 阅读 · 0 评论