【LeetCode】兩數之和


內容目錄

LeetCode第一題:兩數之和
題目描述題目分析題目解答思路一:雙重for循環(1)代碼(2)提交結果思路二:hashmap鍵值對一次遍歷(1)代碼(2)提交結果思考總結

LeetCode第一題:兩數之和

題目描述

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

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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/two-sum

題目分析

這一題我想大部分人第一思路應該都是雙重for循環來遍歷數組。這也是我的第一思路,遍歷兩次數組,當外循環下標和內循環下標對應的兩個數相加為target時,退出循環。這時候我們就找出了這兩個數,但我們需要考慮到題目條件不能重復利用數組中同樣的元素
其實我看到這個條件的時候想了半天,
這個條件的意思是:兩個數據的值不能相同

例如:nums =[1,2,2,3] target = 4
只能返回 [0,3] 而不是 [1,2]

還是:兩個數據的下標不能相同

例如:nums =[1,2,3] target = 4
只能返回 [0,2] 而不是 [1,1]

又或者兩者都有(好像有點鑽牛角尖)

題目解答

思路一:雙重for循環

時間復雜度:O(n^2)

(1)代碼

 

 1  class Solution {
 2      public int[] twoSum(int[] nums, int target) {
 3          int length = nums.length;
 4          for (int i = 0; i < length; i++) {
 5              for (int j = 0; j < length; j++) {
 6                  //這里把條件當做不能使用相同的下標元素
 7                  if (j != i && nums[i]+nums[j] == target)
 8                      return new int[]{i,j};
 9              }
10          }
11          return new int[]{};
12      }
13 }

 

 

 

(2)提交結果

 

 

思路二:hashmap鍵值對一次遍歷

將nums[i]作為key,i作為value。
hashmap搜索算法時間復雜度為O(1)
整個算法在最壞的情況下將數組nums中所有值遍歷完也就是O(n)
所以這種解法的時間復雜度:O(n)

(1)代碼
 1 class Solution {
 2     public int[] twoSum(int[] nums, int target) {
 3         int length = nums.length;
 4         HashMap<Integer,Integer> hashMap = new HashMap();
 5         for (int i = 0; i < length; i++)
 6             //如果hashmap中有這個key則直接返回
 7             //如果沒有,則存入hashmap之中
 8             if (hashMap.containsKey(target - nums[i]))
 9                 return new int[]{i,hashMap.get(target-nums[i])};
10             else
11                 hashMap.put(nums[i],i);
12         return new int[]{};
13     }
14 }

 

(2)提交結果

 

 

思考總結

根據這題的兩種解法就可以看出,不同的算法會有不同的效率,所以我們在編程的時候,不要僅僅局限於解出這個題目,而是要在解決問題的基礎上想辦法去優化你的算法,使之效率更高。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM