1:输入参数,两个数组,输出两个数组的公共元素。-----------------这个是阿里二面的一个题,虽然简单,但是可以看出一个人的算法水平,因为时间复杂度做出来会不一样
解答:其实这个问题并不难,就单纯的两个for也可以解决问题,但是这样的时间复杂度就是O(n^2),这样必然不是一个好的算法,其实这个题,只需要O(K),其中K为两个数组中的最大值,代码如下:
public static int[] getSameNumber(int []array1, int []array2){
int[] array3;
int i=0,j=0,k=0;
Arrays.sort(array1);//先对两个数组排序
Arrays.sort(array2);
if(array1.length < array2.length){//定义数组长度,长度为两个数组长度小的
array3 = new int[array1.length];
}else{
array3 = new int[array2.length];
}
while( i< array1.length && j<array2.length){//遍历数组,看代码就明白了
if(array1[i] > array2[j]){
j++;
}else if(array1[i] < array2[j]){
i++;
}else{
array3[k] = array1[i];
i++;
j++;
k++;
}
}
array3 = Arrays.copyOf(array3, k);//之所以要这样,是因为初始化的时候,数组都是0,而如果公共元素没有那么多,就还有0占着,所以要去掉后面为0的内容
return array3;
}
2:输入一个int数字,使用递归,不能有全局变量,实现逆序输出该数字的字符串形式。------------同样也是阿里二面的一个算法题目
比如:输入123
输出就为:“321”
解答:这个题,看起来,有点奇怪,但是并不难,关键要明白一个思路,就是前后两位,相差的是10倍的关系,我自己在做这个题目的时候,也是想