手把手教你如何玩转:面试的一些算法题

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倍的关系,我自己在做这个题目的时候,也是想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值