// 找数字
func HW2023024() {
// 测试用例
// n = 3
// m = 5
// strings = [["0","3","5","4","2"], ["2","5","7","8","3"], ["2","5","4","2","4"]]
// 开始代码
n = Int(readLine()!)!
m = Int(readLine()!)!
while let line = readLine() {
let num = line.components(separatedBy: " ")
if num.count > 0 {
strings.append(num)
}
}
// mapDic: 将数字和坐标转化为字典 key: 输入的数字字符串 value: 输入的数字坐标
var mapDic: [String: [[Int]]] = [:]
for i in 0..<n {
for j in 0..<m {
let input = strings[i][j]
var tempList: [[Int]] = []
tempList = mapDic.keys.contains(input) ? mapDic[input]! : []
tempList.append([i,j])
mapDic.updateValue(tempList, forKey: input)
}
}
var resList: [String] = [] // 结果串
for i in 0..<n {
var list: [String] = []
for j in 0..<m {
let input = strings[i][j]
let tempList: [[Int]] = mapDic[input] ?? []
if tempList.count == 1 { // 只有一个坐标不存在相等值
list.append("-1")
continue
}
var minValue = Int.max // 最小距离
for num in tempList {
let distance = abs(num[0]-i) + abs(num[1]-j)
if distance == 0 { // 距离为零则跳过
continue
}
minValue = min(minValue, distance)
}
list.append(String(minValue))
}
resList.append("[\(list.joined(separator: ","))]")
}
print("[\(resList.joined(separator: ","))]")
}
华为OD机试真题2023_Swift_100_找数字
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 解题思路1、比较两个字符串的长度2、采用滑动窗口的思想解决问题,设置滑动窗口的左右下标,左下标初始值为 0,右下标...
- 解题思路使用双层循环,外层谜面,内层谜底1、变序:判断交换顺序后是否相同2、去重:判断两个字符串去掉重复字符后是否...