在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在面试的时候,很多公司都会让程序员编写一些算法实例,例如快速排序、二叉树查找等等。
本文总结了程序员在代码面试中最常遇到的10大算法类型,想要真正了解这些算法的原理,还需程序员们花些功夫。
1.String/Array/Matrix
在Java中,String是一个包含char数组和其它字段、方法的类。如果没有IDE自动完成代码,下面这个方法大家应该记住:
toCharArray() //get char array of a String
Arrays.sort() //sort an array
Arrays.toString(char[] a) //convert to string
charAt(int x) //get a char at the specific index
length() //string length
length //array size
substring(int beginIndex)
substring(int beginIndex, int endIndex)
Integer.valueOf()//string to integer
String.valueOf()/integer to string
String/arrays很容易理解,但与它们有关的问题常常需要高级的算法去解决,例如动态编程、递归等。
下面列出一些需要高级算法才能解决的经典问题:
2.链表
在Java中实现链表是非常简单的,每个节点都有一个值,然后把它链接到下一个节点。
class Node {
int val;
Node next;
Node(int x) {
val = x;
next = null;
}
}
比较流行的两个链表例子就是栈和队列。
栈(Stack)
class Stack{
Node top;
public Node peek(){
if(top != null){
return top;
}
return null;
}
public Node pop(){
if(top == null){
return null;
}else{
Node temp = new Node(top.val);
top = top.next;
return temp;
}
}
public void push(Node n){
if(n != null){
n.next = top;
top = n;
}
}
}
队列(Queue)
class Queue{
Node first, last;
public void enqueue(Node n){
if(first == null){
first = n;
last = first;
}else{
last.next = n;
last = n;
}
}
public Node dequeue(){
if(first == null){
return null;
}else{
Node temp = new Node(first.val);
first = first.next;
return temp;
}
}
}
值得一提的是,Java标准库中已经包含一个叫做Stack的类,链表也可以作为一个队列使用(add()和remove())。(链表实现队列接口)如果你在面试过程中,需要用到栈或队列解决问题时,你可以直接使用它们。
在实际中,需要用到链表的算法有:
3.树&堆
这里的树通常是指二叉树。
class TreeNode{
int value;
TreeNode left;
TreeNode right;
}
下面是一些与二叉树有关的概念:
- 二叉树搜索:对于所有节点,顺序是:left children <= current node <= right children;
- 平衡vs.非平衡:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树;
- 满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点;
- 完美二叉树(Perfect Binary Tree):一个满二叉树,所有叶子都在同一个深度或同一级,并且每个父节点都有两个子节点;
- 完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
堆(Heap)是一个基于树的数据结构,也可以称为优先队列( PriorityQueue),在队列中,调度程序反复提取队列中第一个作业并运行,因而实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。
下面列出一些基于二叉树和堆的算法:
本文借鉴:http://www.csdn.net/article/2014-04-10/2819237-Top-10-Algorithms-for-Coding-Interview(。。。。)
未完待续请看下一篇http://blog.csdn.net/u011225629/article/details/48320669
分享到:
相关推荐
这份资料集合了"代码面试最常用的10大算法",旨在帮助求职者提升在面试中的表现。以下是这些算法的详细解析: 1. **排序算法**: - **快速排序**:通过分治策略实现,选择一个基准元素,将数组分为小于和大于基准...
摘要:面试也是一门学问,在面试之前做好充分的准备则是成功的必须条件,而程序员在代码面试时,常会...本文总结了程序员在代码面试中最常遇到的10大算法类型,想要真正了解这些算法的原理,还需程序员们花些功夫。
总之,《程序员代码面试指南》是一本全面且深入的资源,它不仅提供了大量的代码示例,还涵盖了理论知识和实践经验,对于希望提升自己算法能力、准备IT名企面试的程序员来说,是一本不可多得的宝典。
1. 1 - 100, 找出质数 2. 冒泡排序 3. 1~100共一百个自然数,放入一个只有99个元素的数组中,找出没有被放入数组的这个数; 4. 字符串的反转输出 5. 截取字符串, 如果该字符串是“abc我的”,当截取的字节数是3时候...
10. **堆**:最大堆和最小堆可用于优先队列,也可以用来求解Top-K问题。理解堆的性质和操作,如插入、删除和调整,是解决这些问题的关键。 面试中的算法题通常要求在有限的时间内编写出正确且高效的代码,因此熟练...
本资源"常见算法面试题目有代码详解"显然是一份针对算法面试的珍贵资料,涵盖了链表、图、树以及数据元素等核心概念。下面将详细阐述这些领域的关键知识点。 首先,链表是一种线性数据结构,它的元素(节点)不连续...
8. **常用算法**:除了上述数据结构,面试还会涉及排序、查找、图论、动态规划、贪心算法等经典算法。例如,快速排序、归并排序、二分查找、KMP字符串匹配、最小生成树(Prim或Kruskal)、最短路径(Dijkstra或...
常见算法介绍、算法刷题(含解析与代码)、笔试面试算法题
常见c#面试算法代码,保证正确无误,欢迎下载!!!!
本"Scala程序员面试算法宝典代码"集合了多种常见算法的实现,旨在帮助求职者提升面试成功率。 1. **基础数据结构** - 数组:数组是最基本的数据结构,用于存储固定大小的同类型元素集合。在Scala中,可以使用Array...
在面试过程中,面试官通过算法问题来评估求职者的逻辑思维、问题解决技巧和代码实现能力。因此,对于求职者来说,熟悉和掌握经典算法,不仅能提高面试通过率,也有助于在工作中解决复杂问题。在准备阶段,除了阅读...
10. **问题分析和解决方案**:面试不仅仅是测试你是否知道某种算法,更重要的是看你怎么分析问题,选择合适的算法,以及如何调试和优化代码。 掌握以上这些知识点,并通过实际练习和分析题目来提升自己的算法能力,...
这个名为"java常用算法大全源代码.zip"的压缩包文件显然包含了丰富的Java算法实现,对于学习和提高编程技能非常有帮助。随书光盘的形式表明这可能是某本关于Java算法书籍的配套资源,而“全套”和“注释详细”的描述...
4. **动态规划**:背包问题、最长公共子序列、矩阵链乘法等,动态规划是解决具有重叠子问题和最优子结构问题的有效方法,理解和编写动态规划代码是面试中的高分项。 5. **贪心算法**:贪心算法在解决部分最优问题上...
本资料包“算法数据结构常见面试题”是为准备面试的程序员精心准备的,涵盖了这一领域的核心知识点,旨在帮助你提升面试成功率。 数据结构是计算机科学中用于组织和存储数据的一种方式,它关系到数据的逻辑结构、...
根据给定的信息,本文将对Java面试中常见的算法题进行详细的解析与总结,特别是针对冒泡排序和选择排序这两种基础但重要的排序算法。 ### 冒泡排序 #### 算法原理 冒泡排序是一种简单的排序算法。它重复地遍历要...
为了帮助求职者们更有效地准备面试中的算法部分,《2024年互联网面试算法常见100题精析.pdf》这本图解笔记应运而生。它汇集了105道高频面试题,并以图解的方式进行解析,使之更加生动和易于理解,尤其适合算法初学者...
这里我们将深入探讨几种常见的排序算法,如冒泡排序、选择排序和插入排序,并分析一个递归求斐波那契数列的问题,以及模拟事件处理的简单设计模式。 首先,让我们来看冒泡排序。冒泡排序是一种简单的排序算法,它...
《程序员面试算法大全》这份资料集是专门为准备面试的程序员们精心整理的资源,涵盖了大量常见面试题目的实例和解析,旨在帮助求职者提升在面试中的表现。由于标签为"test",我们可以推断这份资料主要关注的是测试...