美文网首页
华为OD机试真题2023_Swift_100_数组的中心位置

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

作者: 雾中探雪 | 来源:发表于2023-03-07 21:46 被阅读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!)
            }
        }
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/jvwjldtx.html