华为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!)
}
}