2016-04-22 22 views
1

LeetCode簡単88マージソートされた配列のうちスウィフト致命的なエラー:インデックスが範囲

質問:

は、2つのソート整数配列nums1とnums2を考えると、1つのソートされた配列としてnums1にnums2をマージします。

あなたはnums1がnums2からadditionalelementsを保持するのに十分なスペース(大きいまたはM + Nに等しい大きさ)を有していると仮定してもよいです。 nums1とnums2で初期化される要素の数はそれぞれmとnです。

私のコードでコメントしたエラーがあります。私はindex2とindex3を印刷しました。両方ともゼロです。彼らは合法でなければなりません。なぜこのエラーが出るのですか?

助けていただければ幸いです。あなたのお時間をありがとうございました!

class Solution 
{ 
    func merge(inout nums1:[Int], _ m: Int, _ nums2:[Int], _ n: Int) 
    { 
     var index1 = m - 1 
     var index2 = n - 1 
     var index3 = m + n - 1 

     while index2 >= 0 && index1 >= 0 
     { 
      if nums1[index1] > nums2[index2] 
      { 

       nums1[index3] = nums1[index1] 
       index3 -= 1 
       index1 -= 1 


      } 
      else 
      { 
       nums1[index3] = nums2[index2] 
       index3 -= 1 
       index2 -= 1 
      } 
     } 

     while index2 >= 0 
     { 
      print(index2) 
      print(index3) 
      nums1[index3] = nums2[index2] // fatal error: Index out of range 
      index3 -= 1 
      index2 -= 1 
     } 

    } 
} 



let test1 = Solution() 
var haha = [Int]() 
haha = [] 
test1.merge(&haha,0, [1],1) 
print(haha) 

答えて

0

変数nums1は、0要素の配列です。したがって、割り当てを行うためのスペースはありません。つまり、index3=0で、これを使用してnums1の最初の要素を指していますが、最初の要素はありません。

たとえば、あなたが変更、場合:

haha = [] 

へ:

haha = [0] 

、あなたの配列nums1は、メソッド内で0番目の要素を持つことになります。

+0

ありがとうございました!それは私には完全に意味があります。あなたの助けに感謝! – Tang