开发工具:
文件大小: 527kb
下载次数: 0
上传时间: 2019-07-02
详细说明:在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在面试的时候,很多公司都会让 程序员编写一些算法实例,例如快速排序、二叉树查找等等。 本文总结了程序员在代码面试中最常遇到的10个算法,想要真正了解这些算法的原理,还 需程序员们花些功夫。class Stack
Node top
public Node peeks
if(top != nullf
return top
return null
public Node popof
if(top = null
return null
felse t
Node temp new Node(top vali
top top next
return temp
public void push(Node nf
if(n! nult
n. next top
top
}
队列( Queue)
class Queue
Node first last
 
public void enqueue(Node n
if(first = nult
first =ni
last first,
felse
last next n.
last= n:
public Node dequeue(t
if(first == null
return nu
felse
Node temp new Node first. val)
first first next
return temp
值得一提的是,Java标准库中已经包含一个叫做 Stack的类,链表也可以作为一个队列使用
(ad()和 remove()。(链表实现队列接口)如果你在面试过程中,需要用到栈或队列解
决问题时,你可以直接使用它们。
在实际中,需要用到链表的算法有:
插入两个数字
重新排序列表
链表周期
Copy List with Random Pointer
合并两个有序列表
合并多个排序列表
从推序列表中删除重复的
分区列表
LRU缓存
3树&堆
这里的树通常是指二叉树。
class TreeNode
int valuer
Tree Node left
TreeNode right
下面是一些与二叉树有关的概念:
·二叉树搜索:对于所有节点,顺序是: left children<= current node<= right
children
平衡Vs非平衡:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1
并且左右两个子树都是一棵平衡二叉树;
满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点;
完美二叉树( Perfect Binary tree):一个满二叉树,所有叶子都在同一个深度
或同一级,并且每个父节点都有两个子节点;
完全二叉树:若设二叉树的深度为h,除第h层外,其它各层(1~h-1)的结点数
都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。
堆(Heap)是一个基于树的数据结构,也可以称为优先队列( PriorityQueue),在队列
中,调度程序反复提取队列中第一个作业并运行,因而实际情况中某些时间较短的任务将等
待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即
为解决此类问题设计的一种数据结构
下面列出一些基于二叉树和堆的算法
二叉树前序遍历
二叉树中序遍历
二叉树后序遍历
字梯
验证二叉查找树
把二叉树变平放到链表里
二叉树路径和
丛前序和后序构建二叉树
把有序数组转换为二叉查找树
把有序列表转为二叉查找树
最小深度二叉树
二叉树最大路径和
平衡二叉树
4. Graph
与 Graph相关的问题主要集中在深度优先搜索和宽度优先搜索。深度优先搜索非常简单,你
可以从根节点开始循环整个邻居节点。下面是一个非常简单的宽度优先搜索例子,核心是用
队列去存储节点。
5
第一步,定义一个 GraphNode
class GraphNodet
int val,
GraphNode next
GraphNodel] neighborsi
boolean visited;
GraphNode (int x)
val= x
GraphNode(int x, GraphNodel n
val= Xi
neighbors =n
public String tostring
return value:+ this. val
第二步,定义一个队列
class Queuet
GraphNode first last
public void enqueue GraphNode nd
if(first == null
first n
last first.
Selset
last .next= n:
last n:
public GraphNode dequeue
if(first = nul)
return null
Selset
GraphNode temp new Graph Node(first. val, first neighbors)
first first next,
return temp:
第三步,使用队列进行宽度优先搜索
public class GraphTest i
public static void main(String[] args)t
GraphNode n1 new Graph Node (1);
GraphNode n2 new GraphNode(2);
GraphNode n3= new GraphNode 3);
GraphNode n4= new Graph Node( 4)
GraphNode n5= new GraphNode()
n1. neighbors new GraphNodel]n2, n3, n55:
n2. neighbors new GraphNodelkn1, n4 i
n3. neighbors new GraphNodelkn1, n4, n51;
n 4. neighbors new GraphNode]n2, n3, n5;
n5. neighbors= new GraphNodelkn1, n3, n45
breath FirstSearch(n1, 5)
public static void breath First search (Graph Node root int x
if(root. val ==X
System. out. printin( find in root")
Queue queue new Queue
root visited true
queue enqueue(root);
while(queue first != null
GraphNode c=Graph Node queue dequeue;
for(Graph Node n: c neighbors
if(!n visited)t
System. out. print(n +)
n, visited true
f(n.val==×
System. out. printIn ("Find+n)
queue enqueue(n)
输出结果
value: 2 value:3 value: 5 Find value: 5
value: 4
实际中,基于 Graph需要经常用到的算法
克隆 Graph
5排序
不同排序算法的时间复杂度,大家可以到wk上查看它们的基本思想。
A
gonIum
Average Time‖ Worst Time‖ Space
Bubble sort
n^2
n^2
Selection sort 2
n^2
Insertion sort"2
n^2
Quick sort
n log(n)
0 2
Merge sort
n log(n)
n log(n)
depends
Bin sort、RadⅸxSor和 Countor使用了不同的假设,所有,它们不是一般的排序方法。
下面是这些算法的具体实例,另外,你还可以阅读:]ava开发者在实际操作中是排序的。
归并推序
快速推序
插入推序
6递归和迭代
下面通过一个例子来说明什么是递归。
句题
这里有n个台阶,每次能爬1或2节,请问有多少种爬法?
步骤1:查找n和n-1之间的关系
为了获得n,这里有两种方法:一个是从第一节台阶到n-1或者从2到n-2。如果f(n)种爬法刚
好是吧到n节,那么f(n)=f(n-1)+f(n2)
步骤2:确保开始条件是正确的
f(0)=0;
f(1)=1;
public static int f(int nX
if(n<= 2)return n
int x=f(n-1)+f(n-2);
return x.
递归方法的时间复杂度指数为η,这里会有很多冗余计算。
f(5)
f(4)+f(3)
f(3)+f(2)+f(2)+f(1)
f(2)+f(1)+f(2)+f(2)+f(1)
该递归可以很简单地转换为迭代。
public static int f(int nt
if(n<=2){
return n;
int first 1 second 2.
int third = 0:
for(int i=3; i<= n; i++)i
third first second
first= second
second third
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.