代码之家  ›  专栏  ›  技术社区  ›  Tang

Swift致命错误:索引超出范围

  •  1
  • Tang  · 技术社区  · 8 年前

    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 回复  |  直到 8 年前
        1
  •  0
  •   user212514    8 年前

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

    例如,如果您更改:

    haha = []
    

    至:

    haha = [0]
    

    然后你的数组 数字1 将在方法内有第0个元素。