反序輸出正整數和求數組交集的問題

    今天看了一片關於阿里面試的文章,對於其中的幾個問題還是蠻感興趣的,所以暫時將問題的答案記錄一下,如果有高手看到我的文章,有更好的解決方案,也希望能提點一下。

   問題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.
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章