最近在求职面试,整理一下常见面试算法:

对TestAlgorithms.java中方法的测试见JunitTestAlgorithms.java(引入了junit4)

1.TestAlgorithms.java

 package carl;

 import org.junit.Test;

 /**
* 本类中总结了常用的几种算法
* @author Administrator
*
*/
public class TestAlgorithms { /**
* 插入排序
* 插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小
* 插入前面已经排序的文件中适当位置上,直到全部插入完为止。
* @param list
* @return
*/
public void insertSort(int[] list){
for(int i=1;i<list.length;i++){
int tmp = list[i];
int j=i-1;
for(; j>=0 && list[j] >tmp; j--){
list[j+1]=list[j];
}
list[j+1]=tmp;
} } /**
* 希尔排序:dk为1的时候就是插入排序
* 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;
* 随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
* @param list
* @param start
* @param dk
*/
public void shellInsert(int[] list, int start, int dk) {
int i,j;
for(i = start+dk; i < list.length; i = i + dk){
j = i-dk;
int tmp = list[i]; for (;j >= 0 && list[j] > tmp;j -= dk) {
list[j + dk] = list[j];
}
list[j + dk] = tmp;
} } /**
* 冒泡排序
* 它重复地走访过要排序的数列,一次比较两个元素,
* 如果他们的顺序错误就把他们交换过来。走访数列的工作是
* 重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
* 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
* @param list
*/
public void bubbleSort(int[] list) {
for (int i = 0; i < list.length; i++) {
for (int j = 0; j < list.length - i - 1; j++) {
if (list[j] > list[j + 1]) {
int temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
}
}
}
} // 字符串反转
public String reverse(String str) {
String str1 = "";
for (int i = str.length(); i > 0; i--) {
str1 += str.substring(i - 1, i);
}
return str1;
} /**
* 编码实现字符串转整型的函数(实现函数atoi的功能)。
* 如将字符串”+123”->123, ”-0123”->-123,“123CS45”->123,“123.45CS”->123, “CS123.45”->0
* @param str1
* @return
*/
public int str2Int(String str1) {
char[] str = str1.toCharArray();
int i = 0, sign = 1, value = 0;
if (str != null && str[0] > '9' && str[0] < '0') {
value = 0; // 如果第一个元素为字母,直接赋值零
} else {
if (str != null && str[0] == '-' || str[0] == '+') {
// 判断是否存在符号位
i = 1;
sign = (str[0] == '-' ? -1 : 1);
}
for (; str[i] >= '0' && str[i] <= '9'; i++)
value = value * 10 + (str[i] - '0');
}
return sign * value;
} /**
* 根据字节对字符串拆分,要注意若是GBK编码,则中文字符占用两个字节
* 如“123我是谁”,拆分4个字节,程序要求的结果为“123我”,而不是“123?”
* @param str
*/
public String splitChinese(String str,int index){
String tmp = "";
for(int i=1;i<=str.length();i++){
tmp = str.substring(0, i);
if(tmp.getBytes().length >= index){
return tmp;
}
}
System.out.println(tmp.getBytes().length); return "";
} }

2.JunitTestAlgorithms.java

 package carl;

 import java.io.UnsupportedEncodingException;

 import org.junit.Test;

 public class JunitTestAlgorithms {
TestAlgorithms ta = new TestAlgorithms(); public void pintList(int[] target){
int len = target.length;
System.out.println("length:"+len);
for(int i = 0; i < len; i++){
System.out.print(target[i]+ (i==(len-1)?"":","));
}
} @Test
public void insertSortTest(){
int[] list = {1,2,3,4,7,5,6,10,22};
ta.insertSort(list);
System.out.println("\n------------insertSortTest-----------");
this.pintList(list);
} @Test
public void shellInsertTest(){
int[] list = {1,2,3,4,7,5,6,10,22};
int i = 0, w = 2;
while (i < w) {
ta.shellInsert(list, i, w);
i++;
}
ta.shellInsert(list, 0, 1);
System.out.println("\n-----------shellInsertTest-----------");
this.pintList(list);
} @Test
public void bubbleSortTest(){
int[] list = {1,2,3,4,7,5,6,10,22};
ta.bubbleSort(list);
System.out.println("\n------------bubbleSortTest---------");
this.pintList(list);
} @Test
public void reverseTest(){
String str = "abcdefg";
String tmp = ta.reverse(str);
System.out.println("\n----------reverseTest------------");
System.out.println(tmp);
} @Test
public void str2IntTest(){
int str2Int = ta.str2Int("-123.4CS4546");
System.out.println("\n----------str2IntTest------------");
System.out.println(str2Int);
} @Test
public void splitChineseTest(){
String str="123我是谁";
System.out.println("\n----------splitChineseTest------------");
try {
//因为我的java文件编码是GBK,所以getBytes()默认的编码是GBK
System.out.println("\"123我是谁\".getBytes(\"GBK\").length:"+str.getBytes("GBK").length);
System.out.println("\"123我是谁\".getBytes().length:"+str.getBytes().length);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String resultStr = ta.splitChinese(str,4);
System.out.println(resultStr);
} }

输出结果:

----------splitChineseTest------------
"123我是谁".getBytes("GBK").length:9
"123我是谁".getBytes().length:9
123我

------------insertSortTest-----------
length:9
1,2,3,4,5,6,7,10,22
----------str2IntTest------------
-123

-----------shellInsertTest-----------
length:9
1,2,3,4,5,6,7,10,22
----------reverseTest------------
gfedcba

------------bubbleSortTest---------
length:9
1,2,3,4,5,6,7,10,22

Java求职面试准备之常见算法的更多相关文章

  1. 常见算法合集[java源码+持续更新中...]

    一.引子 本文搜集从各种资源上搜集高频面试算法,慢慢填充...每个算法都亲测可运行,原理有注释.Talk is cheap,show me the code! 走你~ 二.常见算法 2.1 判断单向链 ...

  2. Android开发面试经——3.常见Java基础笔试题

      Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...

  3. java异常面试常见题目

    在Java核心知识的面试中,你总能碰到关于 处理Exception和Error的面试题.Exception处理是Java应用开发中一个非常重要的方面,也是编写强健而稳定的Java程序的关键,这自然使它 ...

  4. 【搞定Jvm面试】 Java 内存区域揭秘附常见面试题解析

    本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb ([Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错 ...

  5. 大公司面试经典数据结构与算法题C#/Java解答

    几个大公司(IBM.MicroSoft and so on)面试经典数据结构与算法题C#解答 1.链表反转 我想到了两种比较简单的方法 第一种是需要开一个新的链表,将原链表的元素从后到前的插入到新链表 ...

  6. 面试十大常见Java String问题

    本文介绍Java中关于String最常见的10个问题: 1. 字符串比较,使用 "==" 还是 equals() ?简单来说, "==" 判断两个引用的是不是同 ...

  7. 两年Java的面试经验

    前言:从过年前就萌生出要跳槽的想法,到过年来公司从3月初提出离职到23号正式离职,上班的时间也出去面试过几家公司,后来总觉的在职找工作总是得请假,便决心离职后找工作.到4月10号找到了一家互联网公司成 ...

  8. Android开发面试经——5.常见面试官提问Android题①

    版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客: http://blog.csdn.net/f ...

  9. java开发面试问题

    Java面试题:java的垮平台原理 为什么要跨平台使用????? 其实说白了就是个操作系统支持的指令集是不一样的.我们的程序需要再不同的操作系统上运行这些代码. 但是不要说jvm是跨平台的,而真正跨 ...

随机推荐

  1. django apache error.log过大

    利用apache运行django框架,发现apache中error.log增长迅猛,寻找原因不得,于是手动清空... 但是当server遇到问题时,文件过大,导致定位问题十分不便 于是决定探个究竟 首 ...

  2. 写给Node.js新手的7个小技巧

    一些我更愿意在开始就知道东西 利用 Node.js 开发是一个非常有趣,和令人满足的过程, 他有3万多个模块可以选择使用,并且所有的模块可以非常容易的集成入现有的应用之中. 无论如何,对于一些刚开始使 ...

  3. 第四章_PHP基本语法(2)

    1.常量的声明 在PHP中,定义常量使用define()函数来实现 2.魔术常量 名称 作用 __LINE__ 返回文件中的当前行号 __FILE__ 返回该文件的完整路径和文件名 __DIR__ 返 ...

  4. Unable to add App ID because the '10' App ID limit in '7' days has been exceeded.

    Unable to add App ID because the '10' App ID limit in '7' days has been exceeded. 官方的原因是对bundle iden ...

  5. mac ping ip地址

    Mac下有个类似于Windows下CMD的模式叫做终端,但是这个模式和Windows下的CMD有着很大的差别. 工具/原料 Mac电脑一台 方法/步骤   首先通过菜单栏的搜索功能找到“终端”,也可以 ...

  6. 一个简单且丑陋的js切换背景图片基础示例

    不多说,直接上代码,非常基础的一个原生js切换元素背景图片范例 <html> <head> <meta http-equiv="Content-Type&quo ...

  7. Conditional Counting In SQL

      If you ever want to conditionally count the number of times a particular condition occurs in SQL, ...

  8. [leetcode]_Path Sum I && II

    都是考查DFS.经典回溯算法,问题在于我对该类型的代码不熟悉,目前以参考别人的代码,然后加上自己的实现为主,通过类似的题目加强理解. 一.给定一棵二叉树,判断是否存在从root到leaf的路径和等于给 ...

  9. mongodb基础用法

    安装部分 mongodb配置方法 mongodb的安装目录 C:\MongoDB\Server\3.2\bin 创建以下目录 c:\mongo\log c:\mongo\db 创建mongodb的配置 ...

  10. css3干货

    CSS3是CSS2的升级版本,3只是版本号,它在CSS2.1的基础上增加了很多强大的新功能. 目前主流浏览器chrome.safari.firefox.opera.甚至360都已经支持了CSS3大部分 ...