1.問題描述
任給一個整數數組num,一個目標值target,返回這樣的一對下標[i,j],要求滿足兩個下標對應的數組值之和num[i]+num[j]等於target
2.算法介紹
2.1 時間複雜度爲O(n^2)
雙重循環,蠻力
public class Solution {
public int[] twoSum(int[] nums, int target) {
int result[]=new int[2];
for(int i=0;i<nums.length;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[j]==target-nums[i]){
result[0]=i;result[1]=j;
return result;
}
}
}
throw new IllegalArgumentException("NO");
}
}
2.2 時間複雜度爲O(n)
單重循環,同時利用HashMap,快速O(1)查詢
public int[] twoSun_update(int[] nums,int target){
int result[]=new int[2];
Map<Integer,Integer> table=new HashMap<>();
for (int i = 0; i < nums.length; i++) {
table.put(nums[i],i);
int complement=target-nums[i];
if (table.containsKey(complement)) {
result[0]=i;result[1]=table.get(complement);
return result;
}
}
throw new IllegalArgumentException("NO");
}
上述算法是在將數組轉化爲map的同時進行檢驗。當然,我們也可以先轉化後檢驗,時間複雜度不變。