10个最常见的Java算法

上传人:壹****1 文档编号:508130069 上传时间:2023-05-30 格式:DOC 页数:17 大小:159KB
返回 下载 相关 举报
10个最常见的Java算法_第1页
第1页 / 共17页
10个最常见的Java算法_第2页
第2页 / 共17页
10个最常见的Java算法_第3页
第3页 / 共17页
10个最常见的Java算法_第4页
第4页 / 共17页
10个最常见的Java算法_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《10个最常见的Java算法》由会员分享,可在线阅读,更多相关《10个最常见的Java算法(17页珍藏版)》请在金锄头文库上搜索。

1、代码面试最常用的10大算法发表于2014-04-10 11:34|16225次阅读| 来源ProgramCreek|279条评论| 作者X WangJava面试算法排序二叉树归并排序职业生涯摘要:面试也是一门学问,在面试之前做好充分的准备则是成功的必须条件,而程序员在代码面试时,常会遇到编写算法的相关问题,比如排序、二叉树遍历等等。在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在面试的时候,很多公司都会让程序员编写一些算法实例,例如快速排序、二叉树查找等等。本文总结了程序员在代码面试中最常遇到的10大算法类型,想要真正了解这些算法的原理,还需程序员们花些功夫。1.String/Array

2、/Matrix在Java中,String是一个包含char数组和其它字段、方法的类。如果没有IDE自动完成代码,下面这个方法大家应该记住:toCharArray() /get char array of a StringArrays.sort() /sort an arrayArrays.toString(char a) /convert to stringcharAt(int x) /get a char at the specific indexlength() /string lengthlength /array size substring(int beginIndex) subst

3、ring(int beginIndex, int endIndex)Integer.valueOf()/string to integerString.valueOf()/integer to stringString/arrays很容易理解,但与它们有关的问题常常需要高级的算法去解决,例如动态编程、递归等。下面列出一些需要高级算法才能解决的经典问题: Evaluate Reverse Polish Notation Longest Palindromic Substring 单词分割 字梯 Median of Two Sorted Arrays 正则表达式匹配 合并间隔 插入间隔 Two S

4、um 3Sum 4Sum 3Sum Closest String to Integer 合并排序数组 Valid Parentheses 实现strStr() Set Matrix Zeroes 搜索插入位置 Longest Consecutive Sequence Valid Palindrome 螺旋矩阵 搜索一个二维矩阵 旋转图像 三角形 Distinct Subsequences Total Maximum Subarray 删除重复的排序数组 删除重复的排序数组2 查找没有重复的最长子串 包含两个独特字符的最长子串 Palindrome Partitioning2.链表在Java中实

5、现链表是非常简单的,每个节点都有一个值,然后把它链接到下一个节点。class Node int val;Node next; Node(int x) val = x;next = null;比较流行的两个链表例子就是栈和队列。栈(Stack)class StackNode top; public Node peek()if(top != null)return top; return null; public Node pop()if(top = null)return null;elseNode temp = new Node(top.val);top = top.next;return t

6、emp; public void push(Node n)if(n != null)n.next = top;top = n;队列(Queue)class QueueNode first, last; public void enqueue(Node n)if(first = null)first = n;last = first;elselast.next = n;last = n; public Node dequeue()if(first = null)return null;elseNode temp = new Node(first.val);first = fi

7、rst.next;return temp;值得一提的是,Java标准库中已经包含一个叫做Stack的类,链表也可以作为一个队列使用(add()和remove())。(链表实现队列接口)如果你在面试过程中,需要用到栈或队列解决问题时,你可以直接使用它们。在实际中,需要用到链表的算法有: 插入两个数字 重新排序列表 链表周期 Copy List with Random Pointer 合并两个有序列表 合并多个排序列表 从排序列表中删除重复的 分区列表 LRU缓存3.树&堆这里的树通常是指二叉树。class TreeNodeint value;TreeNode left;TreeNode righ

8、t; 下面是一些与二叉树有关的概念: 二叉树搜索:对于所有节点,顺序是:left children = current node = right children; 平衡vs.非平衡:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树; 满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点; 完美二叉树(Perfect Binary Tree):一个满二叉树,所有叶子都在同一个深度或同一级,并且每个父节点都有两个子节点; 完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1h-1) 的结点数都达到最大个数,第 h 层所有的结

9、点都连续集中在最左边,这就是完全二叉树。堆(Heap)是一个基于树的数据结构,也可以称为优先队列(PriorityQueue),在队列中,调度程序反复提取队列中第一个作业并运行,因而实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。下面列出一些基于二叉树和堆的算法: 二叉树前序遍历 二叉树中序遍历 二叉树后序遍历 字梯 验证二叉查找树 把二叉树变平放到链表里 二叉树路径和 从前序和后序构建二叉树 把有序数组转换为二叉查找树 把有序列表转为二叉查找树 最小深度二叉树 二叉树最大路径和 平衡二叉树4.G

10、raph与Graph相关的问题主要集中在深度优先搜索和宽度优先搜索。深度优先搜索非常简单,你可以从根节点开始循环整个邻居节点。下面是一个非常简单的宽度优先搜索例子,核心是用队列去存储节点。第一步,定义一个GraphNodeclass GraphNode int val;GraphNode next;GraphNode neighbors;boolean visited; GraphNode(int x) val = x; GraphNode(int x, GraphNode n)val = x;neighbors = n; public String toString()return valu

11、e: + this.val; 第二步,定义一个队列class QueueGraphNode first, last; public void enqueue(GraphNode n)if(first = null)first = n;last = first;elselast.next = n;last = n; public GraphNode dequeue()if(first = null)return null;elseGraphNode temp = new GraphNode(first.val, first.neighbors);first = first.next;return

12、 temp;第三步,使用队列进行宽度优先搜索public class GraphTest public static void main(String args) GraphNode n1 = new GraphNode(1); GraphNode n2 = new GraphNode(2); GraphNode n3 = new GraphNode(3); GraphNode n4 = new GraphNode(4); GraphNode n5 = new GraphNode(5); n1.neighbors = new GraphNoden2,n3,n5;n2.neighbors = n

13、ew GraphNoden1,n4;n3.neighbors = new GraphNoden1,n4,n5;n4.neighbors = new GraphNoden2,n3,n5;n5.neighbors = new GraphNoden1,n3,n4; breathFirstSearch(n1, 5); public static void breathFirstSearch(GraphNode root, int x)if(root.val = x)System.out.println(find in root); Queue queue = new Queue();root.visited = true;queue.enqueue(root); while(queue.first != null)GraphNode c = (GraphNode) queue.dequeue();for(GraphNode n: c.neighbors) if(!n.visited)System.out.print(n + );n.visited = true;if(n.val = x)System.out.p

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号