算法
文章平均质量分 81
分享面试常考算法和解题思路
西瓜味儿的小志
这个作者很懒,什么都没留下…
展开
-
剑指offer栈、队列、位运算题目汇总(面试必备)
剑指 offer 栈、队列题目汇总(C++版) 1、用两个栈实现队列用两个栈实现一个队列。队列的声明如下,实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 返回 -1 )思路:我们知道队列特点是先进先出,而栈的特点是先进后出。因此我们使用栈1来存储数据,栈2来模拟队列弹出数据。栈2如果为空,就需要把栈1的数据全都 push 过来,否则如果栈2不为空,取出栈顶元素即可。原创 2021-11-18 10:15:33 · 4834 阅读 · 0 评论 -
剑指offer数组题目汇总(面试必备)
剑指 offer 数组题目汇总(C++版) 1、数组中重复的数字一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。找出数组中任意一个重复的数字。思路1:先排序,在遍历。 时间复杂度:O(nlog(n)) ,空间复杂度:O(1)思路2:遍历数组时查询哈希表是否已有这个数,有就返回,没有就添加。时间复杂度:O(n), 空间复杂度:O(n)思路1和2比较简单,代码就不贴了。主要说一下下面的方原创 2021-11-05 10:56:33 · 379 阅读 · 0 评论 -
二分查找算法模板(太强了吧)
二分查找算法模板 模板1当将区间 [l, r] 划分成 [l, mid] 和 [mid + 1, r] 时,其更新操作是 r = mid 或 l = mid + 1,计算 mid 时不需要加1,即 mid = (l + r)/2。C++代码模板:int bsearch_1(int l, int r){ while (l < r) { int mid = (l + r) / 2; if (check(mid)) r = mid;原创 2021-10-19 17:58:06 · 244 阅读 · 0 评论 -
剑指offer二叉树题目汇总(面试必备)
1、二叉树的镜像输入一个二叉树,该函数输出它的镜像。举例:思路1:递归对于样例来说,先改变根结点8的左指针指向的值,左边指向的值换到右边,右边指向的值换到左边。接下来,递归处理,将左子树的根结点作为新的 root,进行上面相同的操作。右子树同理。时间复杂度:O(n) 空间复杂度:O(n)TreeNode* Mirror(TreeNode* pRoot) { if(!pRoot) return pRoot; //特判:如果pRoot为空,返回空 swap(pRoot原创 2021-10-18 18:40:48 · 225 阅读 · 0 评论 -
剑指offer链表题目汇总(面试必备)
1、反转链表输入一个链表,反转链表后,输出新链表的表头。比较简单,直接上代码。时间复杂度:O(n) 空间复杂度:O(1)ListNode* ReverseList(ListNode* pHead) { if(!pHead) return pHead; ListNode* pre = nullptr; while(pHead) { ListNode* temp = pHead->next;原创 2021-09-13 11:37:29 · 290 阅读 · 0 评论 -
面试中常考排序算法总结(不看后悔)
面试中常见的排序算法(C++版) 前置基础知识:稳定:a=b且a在b前面,排序之后a仍然在b的前面不稳定:a=b且a在b前面,排序之后 a 可能会出现在 b 的后面时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现的规律空间复杂度:算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数 1、冒泡排序流程:比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该原创 2021-09-03 10:59:06 · 451 阅读 · 0 评论 -
二叉树遍历算法总结(递归+非递归)
二叉树的前序中序后序层序遍历总结(C++版) 1、前序遍历(根左右)递归:没什么好说的void preOrder(TreeNode* root){ if (!root) return; cout << root->val << " "; preOrder(root->left); preOrder(root->right);} 非递归:借助栈前序遍历根左右,先将当前节点打印,并将其进栈,节点指向原创 2021-09-02 18:55:47 · 284 阅读 · 0 评论