快速致命错误:指数超出范围

时间:2016-04-22 01:41:10

标签: arrays swift2 fatal-error

LeetCode Easy 88合并分类数组

问题:

给定两个排序整数数组nums1和nums2,将nums2合并为nums1作为一个排序数组。

注意:

您可以假设nums1有足够的空间(大小大于或等于m + n)来保存nums2中的附加元素。在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)

1 个答案:

答案 0 :(得分:0)

您的变量nums1是一个0元素数组。所以没有空间让你做作业。也就是说,index3=0并且您使用它来指向nums1的第一个元素,但没有第一个元素。

例如,如果您更改:

haha = []

为:

haha = [0]

然后你的数组nums1将在方法中有第0个元素。