力扣第一題-求兩數之和

題號1:

難度: 簡單

題目: 

給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。
你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素不能使用兩遍。

示例:

     給定 nums = [2, 7, 11, 15], target = 9 因爲 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

思路: 1. 採用暴力法,直接雙重循環遍歷,時間複雜度o(n2)。 2.比較推薦,使用map映射,每次將出現過得數存儲起來o(n)

代碼:

public class _1_TWO_SUM_1 {

    public static void main(String[] args) {
        int [] nums = {2, 7, 11, 15};
        int target = 9;

        System.out.println(Arrays.toString(twoSum(nums,target)));
        System.out.println(Arrays.toString(twoSum2(nums,target)));

    }

    /**
     * 思路: 快排法:
     *  遍歷元素和後面的每個元素做比較
     * 複雜度: O(n2)
     * 結果:
     *   執行用時 :69 ms, 在所有 Java 提交中擊敗了26.61% 的用戶
     *   內存消耗 :39.9 MB, 在所有 Java 提交中擊敗了5.06% 的用戶
     */
    public static int[] twoSum(int[] nums, int target) {
        int [] result = new int[2];
        for(int i=0; i<nums.length -1; i++){
            for(int j = i+1; j<nums.length; j++){
                if(nums[i] + nums[j] == target){
                    result[0] = i;
                    result[1] = j;
                    return result;
                }
            }
        }
        return null;
    }

    /**
     *  思路: hash映射,利用hashMap:
     *  將數組的索引和數組的值存入hashMap中,key是這個數,value是索引,方便查詢
     *  每次存的時候,查一下對應的 target-i 是否在hashMap
     *  中存在,存在則直接返回結果
     *  複雜度: O(n)
     *  結果:
     *    執行用時 :3 ms, 在所有 Java 提交中擊敗了 87.45% 的用戶
     *    內存消耗 :39.8 MB , 在所有 Java 提交中擊敗了 5.06% 的用戶
     */
    public static int[] twoSum2(int[] nums, int target) {
        int [] result = new int[2];
        Map<Integer,Integer> map = new HashMap<>();
        for(int i=0; i<nums.length; i++){
            int num1 = nums[i]; // 數組中的數
            int num2 = target - num1; //要找的另一個數
            Integer index = map.get(num2);
            if(index != null){
                result[0] = index;
                result[1] = i;
                return result;
            }
            map.put(num1,i);
        }
        return null;
    }

}

希望對大家有幫助。

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