面试基础知识
ohh`
这个作者很懒,什么都没留下…
展开
-
二分查找的变形(找大于等于x的第一个数/找小于等于x的最后一个数)
众所周知二分查找是一个在有序数组中很快的查找方式,而一般是找该元素在数组中的位置。那今天作者遇见个问题,查找第一个比x大的数,比如说[5]这个数组第一个比3大的数就是5,而用普通的二分思维找会找不到,所以应该变换一下写法找大于等于x的第一个数int l=0,r=max;while (l < r) { int mid=(l+r)/2; if(k>dp[mid])l=mid+1; //else代表的是k<=dp[mid]所以r=mid也在范围内 else原创 2021-02-03 16:00:54 · 3261 阅读 · 1 评论 -
动态规划-背包问题(0-1背包和完全背包)(Java)
0-1背包0-1背包特点就是有几种物品,每种物品有一个,分别给你重量和价值,然后怎么装才能获取最大利益个人感觉0-1背包的精髓就在画表即得出代码for (int i = 1; i <= 物品数; i++) { for (int j = 1; j <= 背包总重量; j++) { dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-当前物品重量]+当前物品价值); }}然后就是优化问题优化1:因为每次用的都是上一行原创 2021-02-02 20:42:19 · 186 阅读 · 0 评论 -
LCA问题(java实现)
什么是LCA问题LCA是最近公共祖先问题(Lowest Common Ancestor)的缩写解释:LCA是指对一颗有根树T的两个节点u和v最近公共祖先LCA(T,u,v)代表一个节点x,满足x是节点u和v的祖先距离根节点尽可能远即深度尽可能大例:(图片来自b站)LCA问题解决这里是跟leetcode的Krahets大佬学的,简直膜拜大概思想就是先递归到最底层,然后从最下面向上面返回一个值,如果找到u或v的话就就向上返回,直到返回到交点时候再向上返回交点,即为LCA(T,u,v),下面是大佬原创 2021-02-01 15:32:34 · 702 阅读 · 2 评论 -
八大排序----快速排序
快速排序是一种不怎么稳定的排序,最快时间复杂度为O(nlogn),最慢则需要O(n*n),作者不太喜欢这个排序,因为这个排序有库函数,谁愿意自己写呢(手动狗头)。大体思想:快排采用的是分治的思想,每次将一个数放到属于自己的位置,然后再去对左右排序,依次类推举例:数组:5,2,6,9,1,3,4,8,7如图,以4为基准,一个指针放在i=0,一个放在j=len-1,从右往左找一个比基准小的数(即应该出现在基准左面但却出现在右面了),然后和左指针所处互换,在从左向右找一个比基准大的数,再i,j互换,直到原创 2021-01-31 13:57:01 · 128 阅读 · 2 评论 -
数据结构-图-拓扑排序
拓扑排序是有向无环图的一种输出顺序,根据的是依赖性,即如果有图中的图结构,只有所有的前置节点输出完了才能输出当前节点,也就是依赖性,在什么前提下才能输出这个点。拓扑排序实现:说拓扑排序实现之前应该讲一个词,入度,什么是入度,即有几个点能到达当前节点也就是能进入当前节点,如图2这个节点的入度就是2.仔细思考,如果所有的节点入度都不为零,是否能实现拓扑排序,当然不能,因为每一个点都需要前置技能代表点之间互为前置技能,也就是形成了环,所以拓扑排序还被用来判断一个图中是否有环。想找所有点的前置技能,这个前置原创 2021-01-30 20:14:20 · 180 阅读 · 0 评论 -
数据结构-图的存储(邻接矩阵,邻接表)及遍历(dfs,bfs)
今天刷leetcode也是碰见了跟图有关的问题,那么今天就来介绍一下图的存储和遍历图存储的两种方式:邻接矩阵和邻接表邻接矩阵,顾名思义,本身是一个矩阵也就是二维数组,用一个二维数组的索引作为点与点之间的关系,用二维数组实际存储的数据储存是否相通或边权。用邻接矩阵存储时,遍历方式也分两种邻接矩阵的深度优先搜索/* * start:现在所在的点 * visit:判断当前点是否来过 * edges:储存边的数组 * points:储存点的数组 * */ p原创 2021-01-30 17:58:36 · 1872 阅读 · 0 评论 -
八大排序----归并排序
归并排序是一种很稳定,很快的排序,时间复杂度为O(nlogn),作者很喜欢这个排序大概思想就是分治,每次找一半,直到就剩一左一右两个元素,比如说{4,8,6,2,3,7}递归找到最左面的也就是 {4,8}发现有序,然后回溯找右面的发现右面不够两个,再回溯也就是{4,8,6}合并,即{4,8}和{6}合并,取一个temp数组,用来存储合并后有序的这个数组,取左数组和右数组的头,遵循一个思想,谁小就把谁往temp里面放,然后下标++。public static void merge(int[] nums,原创 2021-01-27 14:52:32 · 91 阅读 · 0 评论 -
树的遍历的三种方式(递归和非递归)(Java)
递归版:先序遍历:public static void preTraverse(TreeNode node,List<Integer> list){ if(node==null)return; list.add(node.val); preTraverse(node.left,list); preTraverse(node.right,list); }中序遍历:public static void preTrave原创 2021-01-20 17:48:10 · 423 阅读 · 0 评论 -
操作系统-面试准备
1.操作系统基本特征并发并发指两个或多个事件同时发生,这些事件宏观上是同时发生的,但微观上还是交替发生的并发和并行的区别并发: 指在某段时间内多个任务都会被处理,但某一时刻,只有一个任务执行,单个处理器可以做到并发,如果有AB两个进程,只能保证AB之间切换速度够快,在宏观上体现为一段时间内能运行多个程序并行: 指在同一个时间点就有多个任务运行,但是需要多核处理器完成,微观上就能执行多条指令,不同的程序放在不同的处理器上完成共享即资源共享,指系统中的资源可以供多个并发执行的进程共同原创 2021-01-13 19:48:41 · 155 阅读 · 1 评论