1. 程式人生 > >LeetCode兩數之和

LeetCode兩數之和

給定一個整數數列,找出其中和為特定值的那兩個數。
class Solution {
    public int[] twoSum(int[] nums, int target) {
             TreeMap<Integer,Integer> map=new TreeMap<>();//hashmap都可以
        for(int i=0;i<nums.length;i++){
            map.put(target-nums[i],i);
        }
        LinkedHashSet<Integer> arr=new LinkedHashSet();//為了記錄結果,因為不知道有多少對,是個不確定的長度,所以用list和set最佳
        for(int i=0;i<nums.length;i++){
            if(map.containsKey(nums[i])){
                if(map.get(nums[i])!=i){
                  arr.add(i);
                  arr.add(map.get(nums[i]));
                  map.remove(target-nums[map.get(nums[i])]);
                  map.remove(nums[i]);   
                }
                 
            }
        }
         
       int b[]=new int[arr.size()];
        int size=0;
        for (Integer integer : arr) {
			b[size]=integer;
			size++;
		}
       return b; 
    }
}

你可以假設每個輸入都只會有一種答案,同樣的元素不能被重用。示例:給定 nums = [2, 7, 11, 15], target = 9因為 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]

    看到這個題我們首先想到的是必須要知道a[i]和目標和的差,這樣我們才能找到對應的數。如果這點想到了這個問題就迎刃而解了。

     在這裡為了方便檢索我使用了集合框架:Map(key,value) 他可以直接根據key來查詢對應的value,首先我們要把陣列放在map中。其中key=targer-a[i]  valuer=i;

    然後在遍歷陣列,如果a[j]在Map的key集合中,那麼一定有另外一個a[i], 使得 a[i]+a[j]=targer 成立。因為我們在儲存a[i]的時候是  map(targer-a[i],i)存入的。

   但是有幾點要注意:

    1.防止出現 出現 a[i]+a[i]=targer的情況,即陣列中有一個元素為2,targer=4,那麼就可能出錯,所以要加一個判斷防止這樣的情況出現

   2.防止重複,在找到一組數的時候覺得要把他們remove掉;

好了下面直接程式碼伺候:

相關推薦

[leetcode]之和

描述 () 另一個 -s nbsp get list 示例 class 題目描述: 給定一個整數數組和一個目標值,找出數組中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重復利用。 示例: 給定 nums = [2, 7, 11, 15], ta

LeetCode之和(Python)

LeetCode 兩數之和(Python) 題目:給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0]

LeetCode:之和

https://leetcode-cn.com/problems/two-sum/description/ 給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11

Leetcode 之和(c++)

給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9

LeetCode:之和、三之和、最接近的三之和

都用雜湊表的方法 兩數之和 vector<int> twoSum(vector<int>& nums, int target) { int s;

LeetCode-之和

題目:給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], targ

leetcode 之和(Two Sum)

解決方案 方法一:暴力法 暴力法很簡單。遍歷每個元素 xx,並查詢是否存在一個值與 target - xtarget−x 相等的目標元素。 public int[] twoSum(int[] nums, int target) { for (int i = 0;

leetcode 之和 java

給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 +

leetcode 之和 題解

題目: 給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2

leetcode 之和 python

class Solution: def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] "

leetcode-之和II-C++

給定一個已按照升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值index1 和 index2,其中 index1 必須小於 index2。說明:返回的下標值(inde

leetcode-之和IV

給定一個二叉搜尋樹和一個目標結果,如果 BST 中存在兩個元素且它們的和等於給定的目標結果,則返回 true。案例 1:輸入: 5 / \ 3 6 / \ \ 2 4

LeetCode-之和 II

給定一個已按照升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值index1 和 index2,其中 index1 必須小於 index2。說明:返回的下標值(inde

LeetCode之和

給定一個整數數列,找出其中和為特定值的那兩個數。 class Solution { public int[] twoSum(int[] nums, int target) { TreeMap<Integer,Integer> ma

LeetCode 之和等於目標

給定一個整數數列,找出其中和為特定值的那兩個數。你可以假設每個輸入都只會有一種答案,同樣的元素不能被重用。給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0]

leetcode之和C和python3

C: /** * Note: The returned array must be malloced, assume caller calls free(). */ int* twoSum(int* nums, int numsSize, int target) {

leetcode 之和

給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 =

[leetcode]之和(Two Sum)

最近開始做leetcode上的題目,在此簡單做一下記錄。從簡單的題開始做,每週週末更新本週完成的題目ヘ(`▽´*) 有任何不正確的地方還請大佬們指正。 ------------------------------------------------------------

LeetCode——之和】C++實現

1、題目說明:給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例:給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7

leetcode之和python

在編寫leecode上的演算法第一題“兩數之和”時,遇到了一些問題,如下: 1.引數丟失 >>>Solution.twosum([2,3,4,5],8) TypeError: twosum() missing 1 required positional