LeetCode——1.Two Sum

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的同時進行檢驗。當然,我們也可以先轉化後檢驗,時間複雜度不變。

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