Swift —— 有趣的算法

797 阅读3分钟

这是我参与8月更文挑战的第29天,活动详情查看:8月更文挑战

1. FIZZBUZZ

写一个程序打印1到100这些数字。但是遇到数字为3的倍数的时候,打印“Fizz”替代数字,5的倍数用“Buzz”代替,既是3的倍数又是5的倍数打印“FizzBuzz”。

在这里插入图片描述

2. 二分法检索

二分搜索(英语:binary search),也叫折半搜索(英语:half-interval search),是一种在有序数组中查找特定元素的搜索算法。所以是用二分查找的前提是数组必须是有序的。

image.png

3. Factorials & Recursion (阶乘和递归)

一般方法实现阶乘

在这里插入图片描述

递归方法实现阶乘

在这里插入图片描述

4. 找到array中出现最多的词

这里主要分为2步:

  • 计算每个词出现的次数
  • 比较每个词的次数,找到词数最大的词

在这里插入图片描述

5. Reverse every other word

这里要做的就是把词语全部前后颠倒。 实现步骤:

  • 将句子根据中间的空格分割成词语
  • 将词语前后颠倒并且在词语中间加上空格组合成新的句子

在这里插入图片描述

指定单数句的词语前后颠倒。

在这里插入图片描述

移除单词中的元音字母,这里使用for in loop来避免调用五次replacingOccurrences。

在这里插入图片描述

6. Fibonacci Sequence (斐波纳契数列)

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……也就是除了第一个和第二个数字之外,任何数字都是前两个数字之和。 可以这样来实现斐波那契数列。

在这里插入图片描述

使用递归方法实现斐波纳契数列

在这里插入图片描述

7. 高阶函数 (Higher Order Functions)

一个函数如果可以接收一个或多个函数当作参数或者把一个函数当作返回值,那么这个函数就可以叫做高阶函数。使用高阶函数可以简化代码,使逻辑更加清晰并且当数据比较大的时候,高阶函数会比传统实现更快。

Map

对数组进行循环,并对数组中的每个元素采取相同的操作,然后返回数组。

在这里插入图片描述

Filter

遍历数组,过滤不满足条件的元素后返回满足条件的元素组成的数组。

在这里插入图片描述

Reduce

reduce 把集合中所有的值结合起来返回一个新的值。

在这里插入图片描述

几种简写:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

8. 二叉树查找值

对比在数组中寻找一个值,一般情况下,二叉树会比数组的遍历查找效率更高。并且如果是寻找一个数组中不存在的值,那么数组需要遍历全部元素,而二叉树只需要查找他的高度+1次。

在这里插入图片描述

要建立二叉树,要先定义node

在这里插入图片描述

这里就实现了二叉树查找。

在这里插入图片描述

因为知道二叉树左子树的值一定小于父节点,右子树的值一定大于父节点,所以可以优化上面的查找方法。

在这里插入图片描述