スナップ1の両数の和C python


力ボタン1両数の和が理解できないところがあれば指摘を歓迎します.整数配列numsとターゲット値targetを指定します.この配列でターゲット値の2つの整数を見つけて、その配列の下付きを返します.
入力ごとに1つの答えしか対応しないと仮定できます.しかし、この配列の同じ要素を繰り返し利用することはできません.
例:
与えられたnums=[2,7,11,15],target=9
nums[0]+nums[1]=2+7=9なので[0,1]を返します
暴力解法:C int*twoSum(int*nums,int numsSize,int target,int*returnSize){int i,j;int*a=NULL;//static int a[2]={0}に変更可能;returnSize=2;//これなしで[]が出力され、戻り値の個数for(i=0;i{for(j=i+1;j{if(nums[i]+nums[j]=target){result=(int)malloc(sizeof(int)*2);a[0]=i;a[1]=j;return a;}}return a;
}//関数をint*twoSum(int*nums,int numsSize,int target)に変更すると、too many arguments to function'twoSum'2つのreturn aがエラーで報告されます.1つ目はifで、条件を満たさなければ結果を返す必要があります.実行結果:実行時間:208 ms、すべてのCコミットで49.95%のユーザーメモリ消費量:7.7 MBを破り、すべてのCコミットで11.05%のユーザーを破ったこの方法の実行速度は改善される必要がある.ハッシュ表法を利用する:
int* twoSum(int* nums, int numsSize, int target) {

      int min = 2147483647;
      int i = 0;
      for (i = 0; i < numsSize; i++) {
          if (nums[i] < min)
              min = nums[i];//    
      }
      int max = target - min;
      int len = max - min + 1;   //  hash  ,                       
      int *table = (int*)malloc(len*sizeof(int));
      int *indice = (int*)malloc(2*sizeof(int));//   
      for (i = 0; i < len; i++) {
          table[i] = -1;         //hash  ,      
      }
      for (i = 0; i < numsSize; i++) {
          if (nums[i]-min < len) {
              if (table[target-nums[i]-min] != -1) {       //target-num[i]-min   nums[i]-min      ,   target-num[i] target-min,    num[i]-min

Python: class Solution(object): def twoSum(self, nums, target): “”":type nums: List[int] :type target: int :rtype: List[int] “”"for i in range(len(nums)): for l in range(len(nums)-1): if nums[i]+nums[l]==target and i!=l:a=[i,l]return a pythonの暴力解法はもっと遅い.Python enumerate()関数はenumerate()関数を記述し、リスト、メタグループ、文字列などの遍歴可能なデータオブジェクトをインデックスシーケンスに結合するとともに、forループで一般的に使用されるデータとデータの下付き文字をリストします.
Python 2.3. 以上のバージョンで使用できます.2.6 startパラメータを追加します.
構文はenumerate()メソッドの構文です.
Enumerate(sequence,[start=0])パラメータsequence–シーケンス、反復器、または反復をサポートする他のオブジェクト.start–下付き開始位置.戻り値はenumerateオブジェクトを返します.
例:enumerate()メソッドを使用する例を次に示します.
seasons = [‘Spring’, ‘Summer’, ‘Fall’, ‘Winter’] list(enumerate(seasons)) [(0, ‘Spring’), (1, ‘Summer’), (2, ‘Fall’), (3, ‘Winter’)]
List(enumerate(seasons,start=1))#下付き文字1から[(1,‘Spring’),(2,‘Summer’),(3,‘Fall’),(4,‘Winter’)]普通のforループ
i=0 seq=[‘one’,‘two’,‘three’]for element in seq:...print i,seq[i]...i+=1...0 one 1 two 2 three forループenumerate
seq = [‘one’, ‘two’, ‘three’] for i, element in enumerate(seq): … print i, element … 0 one 1 two 2 three
pythonハッシュテーブル(転載)class Solution(object):def twoSum(self,nums,target):dic={}for i,num in enumerate(nums):if num in dic:return[dic[num],i]else:dic[target-num]=i