1. 程式人生 > 其它 >兩數求和(leetcode題庫)

兩數求和(leetcode題庫)

 

兩數求和

題目:

給定一個整數陣列 nums 和一個整數目標值 target,請你在該陣列中找出 和為目標值 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]

 

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

解答過程:

  • 通過題目可得,我們需要從一個數組找出兩個數字來相加,首先我想到了用暴力列舉法

  • 運用兩個巢狀的for迴圈來獲得結果

第一次嘗試,程式碼如下所示:

 public static int[] twoSum(int[] nums, int target) {


       for (int i = 0; i <nums.length ; i++) {   // 第一層for 從陣列中取出一個值nums[i]
           for (int
j = 0; j < nums.length; j++) { //第二層for 從陣列中再取出一個值為nums[k]

               if(nums[i]+nums[j]==target) //判斷nums[i]+nums[k]是否與target相等
              {
                   System.out.println("["+i+","+j+"]");
                   return new int[]{i,j};  //如果存在nums[i]+nums[k]相等則返回一個新陣列
              }
          }

      }
       return new int[0];//如果不存在則返回一個空陣列
  }

 

錯誤:

這裡嘗試輸入一個數組為{1,2,3}要求他們想加的值為6,因為不存在所以應該返回一個空陣列。但是通過執行發現返回了一個數組為【2,2】

這裡發現我們重複使用了數字,這裡修改if語句中的判斷語句為:

 if(nums[i]+nums[j]==target&&i!=j) //判斷nums[i]+nums[k]是否與target相等並且判斷i和j不相等

結論:

這個問題應該是基礎的演算法問題,我採取的是暴力列舉法,但是這個方法的時間複雜度為n^2,時間複雜度過大,後面將嘗試運用HashMap來解答,降低時間複雜度