2016-04-22 52 views
1

本文給出了易88合併排序後的數組夫特致命錯誤:索引超出範圍

問題:

鑑於兩個已排序的整數數組nums1和nums2,合併nums2成nums1爲一個排序後的數組。

注:

你可以假設nums1有足夠的空間(尺寸大於或等於M + N)從nums2持有additionalelements。 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

相關問題