算法題丨Two Sum

描述

Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.git

示例

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

算法分析

難度:低
分析:要求給定的數組,查找其中2個元素,知足這2個元素的相加等於給定目標target的值。
思路:通常的思路,咱們遍歷數組元素,假設當前遍歷的數組元素x,再次遍歷x以後的數組元素,假設當前再次遍歷的數組元素y,判斷x+y是否知足target,若是知足,則返回x,y下標,不然繼續遍歷,直至循環結束。考慮這種算法的時間複雜度是O (n²),不是最優的解法。
跟前面幾章相似,咱們能夠考慮用哈希表來存儲數據,這裏用C#提供的Hashtable來存儲下標-對應值(key-value)鍵值對;
接着遍歷數組元素,若是目標值-當前元素值存在當前的Hashtable中,則代表找到了知足條件的2個元素,返回對應的下標;
若是Hashtable沒有知足的目標值-當前元素值的元素,將當前元素添加到Hashtable,進入下一輪遍歷,直到知足上一條的條件。github

代碼示例(C#)

public int[] TwoSum(int[] nums, int target)
{
    var map = new Hashtable(); ;
    for (int i = 0; i < nums.Length; i++)
    {
        int complement = target - nums[i];
        //匹配成功,返回結果
        if (map.ContainsKey(complement))
        {
            return new int[] { (int)map[complement], i };
        }
        map.Add(nums[i], i);
    }
    return null;
}

複雜度

  • 時間複雜度O (n).
  • 空間複雜度O (1).

附錄

相關文章
相關標籤/搜索