swift - 在 int swift 的数组上找到最大的三个数字
问题描述
我试图在 int 数组中找到最大的三个数字,但我的算法返回错误的结果
输入和输出最大三个数字([141, 1, 17, -7, -17, -27, 18, 541, 8, 7, 7])
结果 [141, 1, 17, 18, 541] 预期 [141, 18, 541]
func largestthreeNumbers(_ array:[Int]) ->[Int]{
var first = 0
var second = 0
var thrid = 0
var result = [Int]()
if array.count < 3 {
print("Invalid Input")
return result
}
for i in 0 ..< array.count {
if array[i] > first{
thrid = second
second = first
first = array[i]
result.append(first)
}
else if(array[i] > second){
thrid = second
second = array[i]
result.append(second)
}
else if (array[i] > thrid){
thrid = array[i]
result.append(thrid)
}
}
return result
}
解决方案
如果您需要保留元素的顺序,您可以按其值对集合元素索引进行排序,获取最高元素的最后 3 个索引,对它们进行排序并映射相应的元素:
let numbers = [141, 1, 17, -7, -17, -27, 18, 541, 8, 7, 7]
let largestNumbers = numbers
.indices
.sorted { numbers[$0]<numbers[$1] }
.suffix(3)
.sorted()
.map{ numbers[$0] } // [141, 18, 541]
如果结果顺序不重要您可以简单地按降序对元素进行排序并获取前 n 个元素:
let largestNumbers = numbers.sorted(by: >).prefix(3) // [541, 141, 18]
如果您正在处理一个大型集合,您可以在 GitHub 上查看 Apple 的 swift-algorithms 中的SortedPrefix算法,正如这篇 SO 帖子中提到的如何获取 Swift 字典中的前 3 个最大值
推荐阅读
- bash - 我应该在 bash 的命令中使用第一个和/或最后一个斜杠吗?
- python - 如何按两列对大数据框进行排序?
- maven - 重启 jenkins 后看到 Maven 插件错误
- javascript - 动态路由防止在 Next.js 中重定向到 404 页面
- python - 在 Python 中迭代 Google Cloud Storage 对象
- python - 使用数组获取“TypeError:'type' object is not subscriptable”
- java - 使用 Socket 将文件从 android 设备传输到服务器的队列
- c# - 如何在 asp.net core MVC xml 格式化程序中删除集合属性
- c++ - 与非引用数据成员不同,const 对象中的引用数据成员保持可修改
- java - 如何检查firebase文档是否存在?