提問:給定一個整數陣列和一個目標值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; }
最新評論