首頁>技術>

提問:給定一個整數陣列和一個目標值target,請找出數組裡面兩兩相加等同於target的所有組

示例:輸入:nums = [2,7,11,15], target = 9

輸出:[2,7]

面試過程中,突然遭遇面試官的提問,一看提問兩數之和,心中偷笑。如此簡單,兩次for迴圈即可解決。看來我這次面試穩了。

當你使用雙重for迴圈來解決此問題的時候,面試官提問到,你可以用時間複雜度更少的方法去實現嗎?面對這種問題,腦海中突然一懵,更少的時間複雜度。。。仔細一想,好像沒有。

兩數之和解法一:

/*** nums 陣列* target 目標值**///解題思路:雙重for迴圈遍歷去獲取兩個元素的相加和==target//時間複雜度o(n^2)public int[] twoSum(int[] nums, int target) {         for(int i=0;i<nums.length;i++){            for(int j=nums.length-1;j>=0; j--){                 if(target== nums[i] + nums[j]){                     a[0]=i;                     a[1]=j;                     if(i==j){	                         continue;                     }                     return a;                 }            }           }          return null;    }

兩數之和解法二(改進版):

/*** nums 陣列* target 目標值**///解題思路:對陣列分別進行兩次遍歷,透過hashMap去尋找是否存在元素,HashMap尋找元素//的時間複雜度是o(1)//時間複雜度o(n)public int[] twoSum(int[] nums, int target) {         Map<Integer, Integer> hashMap = new HashMap<>();        for(int i = 0;i<nums.length;i++){                hashMap.put(nums[i],i);        }        for(int i = 0;i<nums.length;i++){            int complete = target - nums[i];            if(hashMap.containsKey(complete) && hashMap.get(complete) != i){                return new int[]{i,hashMap.get(complete)};            }        }        return null;    }

21
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 《Python神經網路程式設計》讀後感1.1(持續更新)