今天看了一片關於阿里面試的文章,對於其中的幾個問題還是蠻感興趣的,所以暫時將問題的答案記錄一下,如果有高手看到我的文章,有更好的解決方案,也希望能提點一下。
問題1: 有兩個int數組,求兩個數組的交集。
問題2: 寫一個函數,輸入一個正整數,要求輸出一個反序的字符串,用遞歸,不能有全局變量
關於問題1的解決方案:
思路1: 排序,遍歷其中一個數組,然後利用二分法查找每個值是否存在於第二個數組中;
思路 2 :利用hashSet 或者HashMap的key。這樣遍歷的次數更少。
關於問題2的解決方案:
思路:僅僅是讀順序,所以就有從頭讀和從尾部讀的思路。從尾部讀更簡單寫。
public class Test {
public static void main(String[] args) {
System.out.println(fun(123445678));
int [] arr1 = new int[]{1,2,3,5,6,4,7,8,9,55,44,33,22,11,88,666};
int[] arr2 = new int[]{2,3,4,5,6,77,8,9,99,55,442,4,2,34,2,34,234,234234};
long start = System.currentTimeMillis();
Arrays.sort(arr1);
Arrays.sort(arr2);
for(int i = 0 ; i< arr1.length ;i ++) {
if(binarySearch(arr2,arr1[i]) >0){
System.out.println(arr1[i]);
}
}
System.out.println((System.currentTimeMillis() -start));
}
private static int binarySearch(int[] arr2, int i) {
return binarySearch0(arr2,0,arr2.length -1 ,i);
}
public static String fun(int num){
if(num>=10){
return (num%10)+fun(num/10);
}else{
return String.valueOf(num);
}
}
public static int binarySearch0(int[] a, int fromIndex, int toIndex,
int key) {
int low = fromIndex;
int high = toIndex - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
int midVal = a[mid];
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}
}