如果缺少任何序列,如何拆分顺序整数数组

问题描述 投票:-1回答:2

我有一个整数输入数组。我想基于缺少的整数将此数组拆分为多个数组,并将其附加到新数组中。我认为split可以在这里使用,但不知道该怎么做。我只想要arrayFinal

myArray = [0,1,2,4,7,8]

期望的输出

arrayOne = [0,1,2]
arrayTwo = [4]
arrayThree = [7,8]
arrayFinal = [[0,1,2], [4], [7,8]]
arrays swift
2个回答
0
投票

您可以对数组进行排序并按顺序迭代它们。检查元素减1是否等于2D数组的最后一个元素,如果为true,则以其他方式附加带元素的新数组并增加子数组的索引:

extension Collection where Element == Int {
    func grouped() -> [[Element]] {
        let elements = Set(self).sorted()
        guard let first = elements.first else { return [] }
        var result = [[first]]
        var i = 0
        for element in elements.dropFirst() {
            if element-1 == result[i].last! {
                result[i].append(element)
            } else {
                result.append([element])
                i += 1
            }
        }
        return result
    }
}

let myArray =  [0,1,2,4,7,8]
let grouped = myArray.grouped()    // [[0, 1, 2], [4], [7, 8]]

1
投票

这是你要求的算法,因此有十几种不同的方法可以做到这一点。由于您将不得不遍历数组的内容以找到缺少的整数,因此我只需创建一个数组并在其中随附数字,然后每当您遇到间隙时创建一个新数组。

您可能需要针对您可能遇到的任何特殊情况进行调整。 “这总是从0开始向正方向移动吗?”等等

试试这个:

func splitByMissingInteger(array: [Int]) -> [[Int]]? {
    var arrayFinal :[[Int]] = [ [Int]() ]
    var i = 0
    for num in array{
        if arrayFinal[i].isEmpty || (arrayFinal[i].last == nil){
            arrayFinal[i].append(num)
        } else if num == (arrayFinal[i].last! + 1){
            arrayFinal[i].append(num)
        } else {
            i += 1
            arrayFinal.append([Int]())
            arrayFinal[i].append(num)
        }
    }
    return arrayFinal
}
© www.soinside.com 2019 - 2024. All rights reserved.