swift 排序算法
如果不涉及架构方面,以及多重计算优化的话,算法其实并不常用,当然在面试过程中,算法是比较重要的考察方面
Z苗
这个作者很懒,什么都没留下…
展开
-
swift -判断两个链表相交
import UIKitclass ListNode{ var val:Int var next:ListNode? init( val:Int ) { self.val = val self.next = nil } }class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLo原创 2021-09-01 17:44:51 · 200 阅读 · 0 评论 -
Dummy节点和尾插法 练习题
题目描述:给出一个链表和一个值x,要求将链表中所有小于x的值放到左边,所有大于x的值放到右边,并且原链表的节点顺序不能变?例如:例如:1->5->3->2->4->2,给定 x=3 ,则返回为 1->2->2->5->3->4思路:对于这道题目我们要先处理左边即小于X的节点,在处理右边即大于X的节点,最后在将两边左右链接起来。...原创 2019-10-16 15:03:42 · 925 阅读 · 0 评论 -
swift - 二叉树的遍历
最常见的二叉树遍历有三种前序遍历:先访问根节点——左子树——右子树。中序遍历:先访问左子树——根节点——右子树,按照这个顺序。后序遍历:和前面差不多,先访问树的左子树——右子树——根节点。按层遍历:把一棵树从上到下,从左到右依次写出来。例子:一 栈的前序遍历答案:代码: func p_preorderTravelsal(root : TreeNode?) -> [In...原创 2019-10-18 19:13:06 · 2201 阅读 · 0 评论 -
Swift - 如何检测一个链表中是否有环?
问题描述:如何检测一个链表中是否有环分析用两个指针同时访问链表,其中一个的速度是另一个的两倍,如果它们变成相等的了;那么这个链表就有环了这就是快行指针的实际使用。代码 func p_hasCycle(_ head:ListNode?) -> Bool { var slow = head var fast = head ...原创 2019-10-16 17:03:22 · 1007 阅读 · 0 评论 -
Swift - 删除链表中倒数第n个节点 例:1->2->3->4->5,n = 2 ,返回 1->2->3->5
问题描述删除链表中倒数第n个节点 例:1->2->3->4->5,n = 2 ,返回 1->2->3->5解题思路是快行指针,这次两个指针移动的速度相同。但是一开始,第一个指针(在指向头节点之前)就落后第二个指针n节点。接着两者同时移动,当第二个指针移动到尾结点时,第一个节点的下一个节点就是我们要删除的节点...原创 2019-10-16 17:28:55 · 2075 阅读 · 0 评论 -
Swift -请设计一个可以展示一棵二叉树的App
首先一个简单的App是MVC架构的,所以就要在View 的界面上表示一棵二叉树,一般人的脑海中浮现的树的结构如图所以是不是的在View 的界面上,每个节点放一个UILable 来表示,然后用数学方法计算每个UILable 对应的位置,每个UILable 的位置计算起来比较麻烦如果一棵树有很多个节点,那么当前界面就会展示不下,这个时候怎么办?就算用UIScrollView 来处理,整棵...原创 2019-10-21 11:09:13 · 774 阅读 · 0 评论 -
Swift - 选择排序
原理解析:引自维基百科选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。问题描述:把数组 [61,5,33,44,22] 进行从小到大进行排序步骤如下:遍历数组,找到最小的元素...原创 2019-10-21 17:20:05 · 536 阅读 · 0 评论 -
Swift - 插入排序
原理解析它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。问题描述:把数组 [61,5,33,44,22] 进行从小到大进行排序第一种:插入排序通过移动解题步骤: /* 步骤如下: * 从第一个元素开始,该元素可以认为已经被排序 * 取出下一个元素,在已经排序的元素序列中从后向前扫描 ...原创 2019-10-21 15:50:29 · 734 阅读 · 0 评论 -
Swift--栈和对列的实战面试题
1.给出一个文件的绝对路径,要求将其简化例子:路径 /home/ 简化后为/home路径是“/a/./b/…/…/c/”,简化后为“/c”根据常识知道一下规则“.”代表当前路径。比如“/a/.”实际上就是“/a”,无论输入多少个“.”都返回当前目录“…”代表上一级目录。比如“a/b/…”实际上就是“/a”,也就是说先进入“a”目录,再进入其下的“b”目录,再返回“b”目录的上一层,也就...原创 2019-10-17 16:44:32 · 696 阅读 · 0 评论 -
Swift - 判断一棵树是否为二叉查找树
二叉查找树的定义左子树节点的值都小于根节点的值,右子树节点的值都大于根节点的值原创 2019-10-17 18:38:01 · 566 阅读 · 0 评论 -
swift -计算树的最大深度
问题描述给出一个二叉树,找到树的最大深度例子:给定二叉树 [3, 9, 20, nil, nil, 15, 7] 结果是3代码 //计算树的最大深度 func p_maxDepth(root: TreeNode?) -> Int { guard let root = root else { return 0 ...原创 2019-10-17 18:04:47 · 672 阅读 · 0 评论 -
Swift -冒泡排序
原理解析不断比较相邻的两个元素,如果它们的顺序不符合要求就互相调换。问题描述:把数组 [61,5,33,44,22] 进行从小到大进行排序解题步骤步骤如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个,直到把最大的元素放到数组尾部。遍历长度减一,对剩下的元素从头重复以上的步骤。直到没有任何一对数字需要比较时完成。代码://冒泡排序 func p_bub...原创 2019-10-21 16:37:55 · 901 阅读 · 1 评论 -
Swift - 排序面试实战题
问题描述:已知有很多会议,如果这些会议的时间有重叠,则将他们合并。例如:有一个会议的时间为下午3点到5点,另一个会议的时间为下午4点到6点,那么合并之后的会议时间为3点到6点...原创 2019-10-21 19:38:17 · 514 阅读 · 0 评论 -
Swift - 快速排序
原理解析快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。问题描述:把数组 [61,5,33,44,22] 进行从小到大进行排序解题步骤步骤:从数列中挑出一个元素...原创 2019-10-21 18:57:18 · 929 阅读 · 0 评论 -
Swift - 二分搜索
原理解析在有序的数组中查找特定元素的搜索问题描述:从一列有序的数组中查找是否包含27[4, 13, 38, 49, 55, 65, 76, 97]代码://二分搜索 //假设nums是一个升序数组 func p_binarySearch(nums: [Int], target: Int) -> Bool { var left = 0, mid...原创 2019-10-22 15:34:31 · 1947 阅读 · 0 评论 -
Swift -排序实战题
问题描述:已知有很多会议,如果这些会议的时间有重叠,则将它们合并?例子:例如有一个会议的时间为下午3点到5点,另一个会议的时间为下午4点到6点,那么合并之后的会议时间为下午3点到6点/* 例子[[1,3],[5,6],[4,7],[2,3]] [1,3] + [2,3] = [1,3] [5,6] + [4,7] =...原创 2019-10-22 18:09:02 · 1996 阅读 · 0 评论