华为OD机试真题2023_Swift_100_数组的中心位置

2023-03-07  本文已影响0人  雾中探雪

解题思路
双层 for 循环将数组当前下标的左侧和右侧乘积算出来,再进行比较,如果相等就将当前下标保存到数组中,最后取数组的最小值即可

// 数组的中心位置
    func HW2023014() {
        // 测试用例
//        let line = "2 5 3 6 5 6"
        //  开始代码
        let line = String(readLine()!)
        let inputArr = line.components(separatedBy: " ").map { Int($0) ?? 0}
        var resArr: [Int] = []
        for (i, _) in inputArr.enumerated() {
            if i==0 || i == inputArr.count-1 { // 第一个和最后一个一定不会有,所以直接跳过
                continue
            }
            var lNum = 1 // 左侧积初始值为1
            var rNum = 1 // 右侧积初始值为1
            for (j, jNum) in inputArr.enumerated() {
                if j < i {
                    lNum *= jNum // 累乘左侧
                }else if j > i {
                    if rNum > lNum { // 如果发现右侧已经大于左侧就提前结束循环节省时间
                        break
                    }
                    rNum *= jNum // 累乘右侧
                }
            }
            if lNum == rNum { //右侧等于左侧,将该下标保存到数组
                resArr.append(i)
            }
        }
        // 取出数组中最小的下标进行打印
        if resArr.count > 0 {
            resArr = resArr.sorted()
            print(resArr.first!)
        }
    }
上一篇下一篇

猜你喜欢

热点阅读