LeetCode
想做一个开森的胖纸
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 04. 二维数组中的查找
题目分析遍历每一个去对比时间复杂度:O(M*N)线性查找时间复杂度:O(N)从第一行最后一列开始比对因为每一行和每一列都是递增的最后一列的数一定比前面的列的数大当这个数更小,一定再左边或者上边这里用9做例子先用15去做对比,15比9大,15所在的列被排除再用11去和9比,比9大,11所在的列被排除再用7和9去比,比9小,把7所在的行排除掉用8去和9比,8比9小,把8所在的行排除掉用9和9去对比,相等,返回原创 2021-11-19 16:52:02 · 432 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
题目分析遍历从零开始递增1,判断当前下标是否和当前数字相等,不相等当前小标就是缺失的数字时间复杂度:O(n)二分左边和右边下标相加应该等于下标数字,不等于就是中间有缺失等于说明在中间往后l往前,不等于说明在中间往前r往后知道l>r时l下标就是缺失的小标代码class Solution {public: int missingNumber(std::vector<int>& nums) /*遍历*原创 2021-11-19 13:03:59 · 528 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I
题目分析二分两次二分第一次二分找到数组中等于target的数字第一次出现的位置,然后记录如果没有找到,直接返回零第二次二分找到第一个比target大的位置,然后记录第二次出现的位置减去第一个出现的位置就是出现的次数因为是非递减数组,所以不会数值不会减少增加由于是递增数组,找到第一个后开始记录直到第一个不是的代码二分O(logn)class Solution {public: int search(vector<int>& nums原创 2021-11-18 21:06:47 · 585 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
题目分析使用哈希表将每一个数字建立一个是否出现的哈希表数字是否出现如果出现就将对应的键值设置为true如果发现key的对应键值是true,就返回该数字代码class Solution {public: int findRepeatNumber(vector<int>& nums) { std::unordered_map<int ,bool> maps; for (auto num : num原创 2021-11-18 16:31:38 · 153 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
题目分析原地修改先记录原来的字符串长度遍历字符串找到其中的空格根据字符串中的空格数量*2来扩展字符串长度两个指针,一个指向新字符串末尾,一个指向旧字符串末尾如果不是空格将新指针指向字符赋值给就指针指向字符如果时空格将新指针赋值为0新指针减一赋值为2新指针减二赋值为%代码class Solution {public: string replaceSpace(string s) { int oldlen = s.length();//先记录原创 2021-11-18 16:18:53 · 160 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
题目分析使用双指针第一个指针(cur当前节点)指向头节点,第二个指针(pre当前节点前一个节点)指向nullpter(第一个节点反转后即为最后一个节点,最后一个节点next指向nullpter。这里不知道当前链表的最后一个节点)将cur的下一个节点保存在一个临时节点中将cur的下一个指向pre(前一个节点)将pre指向cur(随时保存pre为cur前一个节点)将cur指向cur的下一个节点(即临时节点)在cur为空时结束循环代码/** * Definition原创 2021-11-18 15:33:55 · 44 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
题目分析栈有先进后出的特点将链表先入栈,然后出栈输出就完成了代码/* * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: vector<int> reversePri原创 2021-11-18 15:21:53 · 169 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制
题目分析哈希表使用一个哈希表,存放对应的新创建的链表和老链表的对应关系,每一个节点都相互对应先不管random和next,赋值其他部分直接构建一个链表在哈希表中,将新链表的next构建起来根据head中的random位置来给新链表的位置赋值head和新链表位置是相对于的,head的random位置所对应的节点位置也就是新链表对应节点的random位置代码class Node {public: int val; Node* next;原创 2021-11-18 15:14:54 · 52 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈
题目分析维护一个最小栈,始终保持栈顶元素是最小元素代码#include using std::stack;class MinStack{public:/** initialize your data structure here. */MinStack(){MinStack().push(INT_MAX);}stack stack1 ,minStack;void push(int x){stack1.push(x);//维护最小栈,将栈顶维持为最小元素minSt原创 2021-11-15 18:02:06 · 47 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
题目代码#include using std::stack;class CQueue {public:CQueue(){}stack stack1, stack2;void appendTail(int value){stack1.push(value);}int deleteHead(){//如果第二个为空,将第一个栈中元素压入第二个栈//第二个栈的顺序和第一个栈是相反的。//第一个栈的栈顶是第二个栈的栈尾,所以只需要删除第二个栈栈顶元素即删除原创 2021-11-15 17:55:33 · 59 阅读 · 0 评论