Tag: 竞争性编程

Swift的竞争性编程

最初发布于 swiftrocks.com 。 竞争编程是掌握特定编程语言的一种好方法。 即使您对参加诸如Facebook Hacker Cup之类的世界大赛不感兴趣,仅使用语言的基础知识来解决棘手的算法问题,也会使您面临该语言所没有的方面/捷径,例如效率某些方法/操作以及如何编写更好的替代方法。 这是一个很酷的爱好,而且,作为奖励,您甚至可以间接地为自己备受恐惧的Big 4采访做好准备,在这些采访中您必须在白板上解决算法问题! 尽管在真正的竞争中,使用Swift编码会造成很大的麻烦(因为与其他语言相比,它有点慢,并且几乎没有本地数据结构),但是许多流行的在线平台(如LeetCode,HackerRank和Codefights)都支持Swift,它们是一种很好的方式以使自己成为更好的iOS开发人员,特别是因为竞争问题只会接受非常快速的算法作为可能的解决方案。 如果您以前从未这样做过,我强烈建议您尝试一下。 在本文中,我将为您提供有关如何使用Swift读取输入数据的简短教程,以及一些解决Swift中竞争问题的技巧。 使用Swift读取标准输入 在竞争性编程中,问题的输入通常被馈送到命令行应用程序,该命令程序对此有所了解并输出所需的结果。 诸如LeetCode和CodeFights之类的平台将自动为您处理输入数据,并公开一个空的Swift方法,该方法应返回问题的解决方案,但是其他平台(如HackerRank)有时会让您手动读取,解析标准输入然后打印结果。 幸运的是,这并不像听起来那样复杂。 要模拟竞争性编程环境,请在Xcode中创建一个命令行工具项目: 请注意,命令行工具不是Cocoa应用程序,因此您将无法访问UIKit东西! 像Foundation这样的核心框架就在这里。 在main.swift ,键入并运行以下代码: let line = readLine() print(“Got something! \(line)”) 此时,程序将被冻结。 readLine()是一种标准库方法,可以同步读取标准输入并返回String? 一旦检索到整行,或者如果达到EOF,则返回nil 。 如果您在Xcode的控制台中键入内容,程序将继续执行并打印您编写的内容: 但是,竞争性编程问题可能需要数百行输入。 您可以使用while循环使代码运行直到输入结束: while let line = readLine() { print(“Got something! \(line)”) } 这就是您开始需要了解的所有信息。 从现在开始,您使用纯Swift的技能是唯一的变量。 如果您以前从未这样做过,这是一个示例问题: 示例问题 给定一个整数数组,找到其元素的总和。 输入格式 第一行包含一个整数,表示数组的大小。 第二行包含n空格分隔的整数,它们表示数组的元素。 输出格式 将数组元素的总和打印为单个整数。 […]