您的位置:首页 > 职场人生

java常见面试题(转)搜集汇总

2013-02-21 20:34 549 查看
Java代码







一些Java面试中经常出现的算法题

1.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序
本题的splitStringByComma(String )方法纯属多余,可以用String的split方法一句话代替,且可读性也更强,下面的一段话源自JDK1.6API,StringTokenizer类已不再提倡使用,保留仅为旧代码。

StringTokenizer 是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它)。建议所有寻求此功能的人使用 String 的 split 方法或 java.util.regex 包。

import java.util.*;
public class bycomma{

public static String[] splitStringByComma(String source){

if(source==null||source.trim().equals(""))

return null;
StringTokenizer commaToker = new StringTokenizer(source,",");

String[] result = new String[commaToker.countTokens()];

int i=0;
while(commaToker.hasMoreTokens()){
result[i] = commaToker.nextToken();
i++;
}
return result;
}
public static
void main(String args[]){
String[] s = splitStringByComma("5,8,7,4,3,9,1");

int[] ii = new
int[s.length];
for(int i =
0; i<ii.length;i++){
ii[i] =Integer.parseInt(s[i]);
}
Arrays.sort(ii);
//asc
for(int i=0;i<ii.length;i++ ){

System.out.println(ii[i]);
}
//desc
for(int i=(s.length-1);i>=0;i--){

System.out.println(ii[i]);
}
}
}

2.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。

代码:
public static
boolean isLetter(char c) {
int k=0X80;
return c/k==0?true:false;

}

public static
int lengths(String strSrc){
if (strSrc==null) {

return 0;
}
int len=0;
char[] strChar=strSrc.toCharArray();
for (int i=0;i<strChar.length;i++){

len++;
if (!isLetter(strChar[i])) len++;
}
return len;
}

public static String subString(String origin,int len){

if (origin==null || origin.equals("")|| len<1){

return "";
}
if (len>lengths(origin)){
return origin;
}
byte[] strByte=new
byte[len];
System.arraycopy(origin.getBytes(),0,strByte,0,len);

int count=0;
for (int i=0;i<len;i++){

int value=(int)strByte[i];

if (value<0) count++;

}
if (count % 2 !=0){

//len=(len==1)?++len:--len;
--len;
}
return new String(strByte,0,len);

}
public static
void main(String[] args) {
System.out.println(""+ subString("我ABC汉DEF",6));

}
3、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)

快速排序的伪代码。
/ /使用快速排序方法对a[ 0 :n- 1 ]排序从a[
0 :n- 1 ]中选择一个元素作为m I d d l e,该元素为支点把余下的元素分割为两段left 和r I g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点递归地使用快速排序方法对left 进行排序递归地使用快速排序方法对right 进行排序所得结果为l e f t + m I d d l e + r I g h t

//以下为java程序实现的快速排序算法:
public static
void sort(int[] data) {
quickSort(data,0,data.length-1);

}
public static
void quickSort(int[] data,int low,int high){

int pivotIndex=(low+high)/2;

swap(data,pivotIndex,high);
int k=partition(data,low-1,high,data[high]);

swap(data,k,high);
if ((k-low)>1) partition(data,low,k-1);

if ((high-k)>1) partition(data,k+1,high);

}
public static
int partition(int[] data
int low,int high, int pivot ){

do {
while (data[++low]<pivot) ;
while (high!=0 && data[--high]>pivot);

swap(data,low,high);
}
while (low<high) ;
swap(data,low,high);
return low;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: