夫特致命错误:索引超出范围
问题描述:
本文给出了易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个元素。
非常感谢!这对我来说完全有意义。感谢你的帮助! – Tang