LeetCode每日一題,兩數之和

題目

https://leetcode-cn.com/problems/two-sum/submissions/java

公衆號 《java編程手記》記錄JAVA學習平常,分享學習路上點點滴滴,從入門到放棄,歡迎關注編程

描述

給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和爲目標值 的那 兩個 整數,並返回它們的數組下標。數組

你能夠假設每種輸入只會對應一個答案。可是,數組中同一個元素在答案裏不能重複出現。學習

你能夠按任意順序返回答案。url

示例 1:.net

輸入:nums = [2,7,11,15], target = 9 輸出:[0,1] 解釋:由於 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2:code

輸入:nums = [3,2,4], target = 6 輸出:[1,2] 示例 3:索引

輸入:nums = [3,3], target = 6 輸出:[0,1]內存

Solution

數組nums中存在兩個下標的值相加的和等於target目標值,找到這兩個數字並返回下標,而且答案中不能出現相同的元素座標,即每一個元素下標不能重複leetcode

暴力解法

暴力解法

思路

暴力解法,直接雙重for循環,循環不重複,第一層for循環從0(length-1),第二層for循環從第一層定義的開始+1length,取出第一層循環的值和第二層循環的值,相加等於target則記錄下標並返回

CODE

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] ints = new int[2];
        int length = nums.length;
        for(int i = 0 ; i <length-1 ; i++){
            int a = nums[i];
           for(int j = i+1 ; j <length ; j++){
               int b = nums[j];
               if(a+b==target){
		                ints[0] = i;
                    ints[1] = j;
                    return ints;
               }
            }
        }
        return ints;
    }
}

複雜度

  • 時間複雜度:O(N^2),其中 N 是數組中的元素數量。最壞狀況下數組中任意兩個數都要被匹配一次
  • 空間複雜度:O(1)

結果

執行用時:0 ms, 在全部 Java 提交中擊敗了100.00%的用戶

內存消耗:38.7 MB, 在全部 Java 提交中擊敗了35.39%的用戶

哈希表

哈希表

思路

暴力解法的弊端在於x + y == target的時間複雜度太高,咱們須要快速找到x對應的y(target-x)是否存在,即快速找到對應的索引,哈希表則是一個很好的選擇,利用哈希表將當前值x以及對應下標i存儲起來,對於遍歷的每一個x,先查詢在哈希表中是否有對應的y(target-x),沒有則將x存入到哈希表中,保證x不會和本身匹配

CODE

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; ++i) {
          	//首先檢查哈希表中是否有對應的y(target-x)
            if (hashtable.containsKey(target - nums[i])) {
                return new int[]{hashtable.get(target - nums[i]), i};
            }
          	//存儲當前值和對應下標
            hashtable.put(nums[i], i);
        }
        return new int[0];
    }
}

複雜度

  • 時間複雜度:O(N),其中 N 是數組中的元素數量。對於每個元素 x,咱們能夠 O(1) 地尋找 target - x

  • 空間複雜度:O(N),其中 N 是數組中的元素數量。主要爲哈希表的開銷

結果

執行用時:0 ms, 在全部 Java 提交中擊敗了100.00%的用戶

內存消耗:38.7 MB, 在全部 Java 提交中擊敗了47.28%的用戶

相關文章
相關標籤/搜索