1.2つの合計[2つの番号]

説明

整数配列NUMSと目標値の目標を考えると、配列内の2つの整数の目標値を特定し、その配列の添字に戻すように頼みます

例として
与えられたNUMS = [2、7、11 、15]、目標= 9
ためNUMS [0] + NUMS [1 ] = 2 + 7 = 9
返される[0,1]

思考

  • 暴力:二つのループのために
  • 強化された方法(より便利に、その添字を返すために必要に応じて、O(n)を推奨):見つけるために、辞書を使用してO(1)であります

{番号が必要:私は誰だ}各番号を通じて、私は必要ないんだ場合、私は辞書に書いた私のニーズを入れて行きました

  • 第三の方法(O(nlogn):最初の二つのポインタを使用して、各数、並び替えO(nlogn)の添字セーブ(ソート既知である必要があり、ターゲットは、以下の目標よりも大きいポインタが移動)へ
    の回答
  • パイソン
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        # {需要的差值:index}
        d={}
        for i in range(len(nums)):
            if d.get(nums[i]) is not None: #第二个参数不写,默认返回None,注意返回0时,也会被当作false
                
                return [d.get(nums[i]), i]#i会比较大
            else:
                d[target-nums[i]]=i
        return []
  • C ++
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
     
        unordered_map<int,int> m;
        for (int i=0; i<nums.size(); i++)
            if (m.find(nums[i])!=m.end())
                return {m[nums[i]], i};
            else
                m[target-nums[i]]=i;
        return {};                    
    }
};
公開された78元の記事 ウォン称賛7 ビュー10000 +

おすすめ

転載: blog.csdn.net/puspos/article/details/103124996