入力された整数の配列の中、和が特定の目標に等しい2数のインデックスを求めよ。

一つの入力に対して唯一の正解が存在することを仮定してもいい。

 

例:
nums = [2, 7, 11, 15], target = 9,

nums[0] + nums[1] = 2 + 7 = 9 ので、 [0, 1] をリターンする.

 

 

 

解:
さすが第一問はやさしいものです。解決はいくつでもある。ブルート・フォースだとO(n^2)になりますが、先に入力配列をソートするとO(nlogn)で済む。
O(n)の時間計算量を目指して、O(n)の空間を使ってハッシュテーブルでやってみた。

 

C#のコードは以下です。

public class Solution
{
    public int[] TwoSum(int[] nums, int target)
    {
        Dictionary<int,int> buffer = new Dictionary<int,int>(nums.Length*2);
        for(int i=0; i<nums.Length; ++i)
        {
            int item = nums[i];
            if (buffer.ContainsKey(target-item))
            {
                return new int[]{buffer[target-item], i};
            }
            buffer[item] = i;
        }
        return null;
    }
}