算法
Pledgee
生而向上
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数组元素右边第一个比它大的数
题目描述 给定一个无序的正整数数组, 找出数组中每个元素右边第一个比它大的数(若没有,则返回-1)思路将数组首元素的下标入栈从下标为1的元素开始遍历数组假设当前遍历到的第i个元素是x,若x大于栈顶下标对应的元素,那么这个栈顶下标对应元素的右边第一个比它大的数就是x,将栈顶下标出栈,然后继续处理剩下的元素,直到栈为空或者不再大于栈顶下标对应的元素如果当前遍历到的数组元素不大于栈顶下标对应的数组元素, 那就直接入栈代码实现vector<int> FindFirstBigNum(vecto原创 2020-07-19 20:45:29 · 1317 阅读 · 0 评论 -
二叉树的层序遍历
今天来看一道二叉树的高频面试题,在面试中,对于树的考核基本上就是针对二叉树的一些操作了,比如:二叉树的前序、中序、后序、层序遍历,镜像二叉树,对称二叉树,二叉树的第一个公共父节点,二叉树的深度的等等。因此,平时碰上二叉树的题就要多留意一下。题目描述 输出一棵二叉树层序遍历的结果。思路 层序遍历就是从上往下按顺序依次遍历一棵树。按顺序也就是先进先出的规律,因此可以借助一个辅助队列,首先将根节点加入队列,然后循环判断队列是否为空,在队列不为空的情况下,首先访问队列的首元素,随后将首元素出列,如果左右原创 2020-07-18 20:37:54 · 2614 阅读 · 0 评论 -
三数之和
每日一题–三数之和今天来看一道三数之和的面试题,思路比较简单,直接看题。题目描述 给定一个数组和一个目标值,从数组中找到三个值,使其和最接近目标值。思路 首先定义一个返回值ans=数组前三项的和,然后将数组排序,并遍历数组,在遍历过程中,用双指针思想,即定义两个变量,分别为l和r,每一次循环都要重新赋值,然后从l和r限定的序列两边开始遍历。定义一个临时值sum=nums[i]+nums[l]+nums[r],然后比较abs(sum-target)和abs(ans-target),若abs(su原创 2020-07-16 23:32:19 · 257 阅读 · 0 评论 -
每日一题--判断两个链表相交
今天这道是面试中的高频题,有关链表和树的操作一直都是面试官比较喜欢考的,因为链表和树的操作涉及到指针的使用,面试官可以通过算法题的形式短时间内考察一个人对指针的熟练程度。话不多说,先来看题。题目描述 判断两个单链表是否相交 ,并返回第一个相交的元素。思路 可以想到,如果两个链表相交,那么它肯定是尾部相连,首部分开,就像朝左侧卧的“Y”形。因此,能够想到两种思路,一种是从后往前遍历链表,直到两个链表的某个结点元素值不相等,那这个结点的前一个结点就是第一个相交的结点。另外一种思路就是从前往后遍历,首原创 2020-07-15 22:04:18 · 293 阅读 · 0 评论 -
每日一题--归并排序
每日一题--归并排序今天带来的是归并排序,与快排和堆排相比,归并排序的使用场景就没有那么高了,面试中一般也很少遇到,不过它的排序思想还是很有意思的,主要是分拆和合并。理解了归并排序的思想,对一些其他的算法场景很有启发价值。思路 归并排序主要分为两步:分拆和合并。分拆就是把一个长序列分成若干个短序列,合并就是把两个有序的序列合并成一个有序的长序列。具体到归并排序来说,首先需要将数组分拆到只有一个元素的小序列,在这个过程中可以使用递归。分拆完成后,再把每个小序列两两合并,最终合并成为一个有序的长序列,即原创 2020-07-14 19:33:54 · 225 阅读 · 0 评论
分享