您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 代码面试最常用的10大算法
  所属分类: 其它
  开发工具:
  文件大小: 527kb
  下载次数: 0
  上传时间: 2019-07-02
  提 供 者: aba****
 详细说明:在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在面试的时候,很多公司都会让 程序员编写一些算法实例,例如快速排序、二叉树查找等等。 本文总结了程序员在代码面试中最常遇到的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最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: