我遇到了这个问题,我需要在给定的数组(socks)中找到匹配的数字,并打印出在该数组中找到多少个袜子。这是我的代码:
let numberOfSocks = 9
let socksArray = [10, 20, 20, 10, 10, 30, 50, 10]
func findSocks(numberOfSocks: Int, array: [Int]) {
var arr = array
var uniqueSocks = Array(Set(array))
var matchedPairs = 0
var sockCounter = 0
for i in 0..<uniqueSocks.count { // After the search, remove the element at index
sockCounter = 0
for j in 0..<arr.count {
if uniqueSocks[i] == arr[j] {
sockCounter += 1
if sockCounter % 2 == 0 {
matchedPairs += 1
sockCounter = 0
}
}
}
}
print(matchedPairs)
}
findSocks(numberOfSocks: numberOfSocks, array: socksArray)
首先,我删除了数组中的所有重复项,因此它为我提供了一个我需要搜索的列表唯一的袜子。但是,我想通过删除我已经搜索过的袜子来优化这个算法,我尝试了arr.remove(at:)
但它给了我一个越界,我感觉arr.count
没有正确更新。欢迎任何帮助,谢谢!
答案 0 :(得分:2)
我认为你是在思考问题,专注于细节,而不是大局。你最终想要的是一个字典,其中键是数组中的唯一值,值是这些值在数组中出现的次数。所以从你的字典开始:
aws s3 --profile mybucket1 cp s3://my-bucket1/directory1/ /path/to/local/directory/ --exclude "*" --include "*match-me*" --recursive
您无需var counts = [Int : Int]()
和arr
个变量。而不是后者,只需使用numberOfSocks
,它显然将始终与数组的真实大小同步。
现在循环你的袜子。对于每个sock值,在socksArray.count
字典中增加其计数,或者如果它不在字典中,则添加它并将其计为counts
。
1
有更简洁的方法可以做到这一点,但我认为这是最容易阅读的方法。