中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用LeetCode實現求兩數之和

發布時間:2021-07-12 09:32:37 來源:億速云 閱讀:189 作者:chen 欄目:編程語言

這篇文章主要介紹“怎么用LeetCode實現求兩數之和”,在日常操作中,相信很多人在怎么用LeetCode實現求兩數之和問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用LeetCode實現求兩數之和”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

描述

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

你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素在答案里不能重復出現。

你可以按任意順序返回答案。

示例 1:

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

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

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

Solution

數組nums中存在兩個下標的值相加的和等于target目標值,找到這兩個數字并返回下標,并且答案中不能出現相同的元素坐標,即每個元素下標不能重復

暴力解法

暴力解法

思路

暴力解法,直接雙重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%的用戶

到此,關于“怎么用LeetCode實現求兩數之和”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

隆德县| 玛沁县| 黄陵县| 桃源县| 瓮安县| 贺州市| 星子县| 景洪市| 潜江市| 富阳市| 五峰| 香格里拉县| 宁津县| 淮安市| 教育| 华池县| 商城县| 房山区| 竹山县| 崇信县| 兰考县| 西林县| 南城县| 无极县| 吴江市| 肥城市| 丰顺县| 临泽县| 六枝特区| 宁蒗| 温泉县| 平安县| 江北区| 淳化县| 思茅市| 仙桃市| 安达市| 阿拉尔市| 双桥区| 营山县| 定襄县|