夫特致命错误:索引超出范围

问题描述:

本文给出了易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) 

你的可变nums1是0个元素的数组。所以你没有空间做任务。也就是index3=0,您正在使用它指向nums1的第一个元素,但没有第一个元素。

如果,例如,你改变:

haha = [] 

到:

haha = [0] 

那么你的数组nums1将有方法中第0个元素。

+0

非常感谢!这对我来说完全有意义。感谢你的帮助! – Tang