编程题:
1.两个已经降序排好的数组,将两个数组合并,合并后依然保持降序。
这题基本和并归排序算法类似;
下面是我的解答:
public static int[] together(int[] A,int[] B) {
/**
* 定义合并后的数组
*/
int[] temp=new int[A.length+B.length];
int i = 0;//左序列指针
int j = 0;//右序列指针
int t = 0;//临时数组指针
while (i<A.length && j<B.length){
if(A[i]>=B[j]){
temp[t++] = A[i++];
}else {
temp[t++] = B[j++];
}
}
while(i<A.length){//将左边剩余元素填充进temp中
temp[t++] = A[i++];
}
while(j<B.length){//将右序列剩余元素填充进temp中
temp[t++] = B[j++];
}
return temp;
}
2,使用0-9,a-z,A-Z,生成不重复的长度为4的ID(Sring),写一个方法获取ID(要求ID不能和已经有的ID重复),提供当前已生成ID总数的方法可以被调用。
这题我觉得说白了就是给你一个书生成四位数ID,一个数唯一确定一个ID,总共可以生成62*62*62*62个ID。
下面是我的解答:
//获取ID
public static String generator() {
//获取已经生成的ID总数,调用的提供方法
int count=getTotal();
//假设生成的字符串是“ABCD”,i1:D的下标;i2:C的下标;i3:B的下标;i4:A的下标,s4:A;s3:B;s2:C;s1:D;
int i1=0,i2=0,i3=0,i4=0;
char s1='0',s2='0',s3='0',s4='0';
i1=count%62;
if(count>=62) {
count=count/62;
i2=count%62;
if(count>=62) {
count=count/62;
i3=count%62;
if(count>=62) {
count=count/62;
i4=count%62;
if(count>=62) {
return "没有空余ID生成";
}
}
}
}
//把i1对应的值转换为字符串,即0-9,转化为字符0-9;10-35转化为字符a-z;36-61转化为字符A-Z;
if (i1>=10) {
if (i1>=36) {
s1=(char) (s1+i1+'A'-'0'-36);
}else {
s1=(char) (s1+i1+'a'-'0'-10);
}
}else {
s1=(char) (s1+i1);
}
//下面都是同理
if (i2>=10) {
if (i2>=36) {
s2=(char) (s2+i2+'A'-'0'-36);
}else {
s2=(char) (s2+i2+'a'-'0'-10);
}
}else {
s2=(char) (s2+i2);
}
if (i3>=10) {
if (i3>=36) {
s3=(char) (s3+i3+'A'-'0'-36);
}else {
s3=(char) (s3+i3+'a'-'0'-10);
}
}else {
s3=(char) (s3+i3);
}
if (i4>=10) {
if (i4>=36) {
s4=(char) (s4+i4+'A'-'0'-36);
}else {
s4=(char) (s4+i4+'a'-'0'-10);
}
}else {
s4=(char) (s4+i4);
}
return ""+s4+s3+s2+s1;
}
//获取生成的ID总数,具体步骤省略了
public static int getTotal() {
return 62*62*62*61+62*62*61+62*10+6;
}
public static void main(String[] args) {
System.out.println(generator());//输出ZZa6
}
解答方法有很多,笔试的时候想到了这样的方法就直接写了。