主页

杂项算法

一些算法举例 杂项 产生不重复的随机数 思路 设想一下,有n个苹果,有不同的编号,从1-n,每次拿一个出来。来产生不同的随机数 实现 func randomNumberWithoutDuplication(_ number: Int) -> [Int] { var resultArr = Array(repeating: 0, count: number) var startArr = Array(1...number) for i in 0..<startArr.count { let currentCount = UInt32(startArr.count-i) let index = Int(arc4rando...

阅读更多

树算法

一些算法举例 树 树是最常用且非常有用的数据结构之一,通过下图可以很容易理解树的概念。 上图展示的是一个拥有5个层级数的树结构。树根root是第0层,从树最外层开始每深入一层,其层级树相应的减1。 树能帮你解决很多问题,包括: 表示对象的层级关系 使查询快速高效 能提供有序的数据链 文本的前缀匹配搜索 swift构造树 class TreeNode<T> { var value: T var children: [TreeNode] = [] weak var parent: TreeNode? init(value: T) { self.value = value } ...

阅读更多

链表算法

一些算法举例 链表 合并两个排过序的链表,并将其作为新链表 示例: 输入:1->2->4,1->3->4 输出:1->1->2->3->4->4 思路: 很简单,就是链表遍历,然后变换next就可以了 代码实现: 链表构造 class Node<T> { var value: T var next: Node<T>? init(_ val: T) { self.value = val self.next = nil } } class IntLinkList { var head: Node<Int>? var tail: Node<Int>? ...

阅读更多

数组算法

一些算法举例 数组 接雨水问题 题目 leetcode-42: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水, 如下所示: 上图中,盛水量为3. 示例 输入:height = [3,1,2,4] 输出:3 思路 暴力法 每个i位置,都前后遍历,复杂度为O(n2) print("test") 双指针法 时间复杂度为O(n),空间复杂度为O(1) print("test2") 找降序中的第一个>=第一个height的最长递增子序列,这样就可以盛水。降序的话直接过...

阅读更多

字符串算法

一些算法举例 字符串 复原IP地址 给定一个只包含数字的字符串,复原它并返回所有可能的IP地址格式。 有效的IP地址正好由四个整数(0到255之间组成),整数之间用’.’分隔。 示例 输入: "25525511135" 输出:["255.255.11.135", "255.255.111.35"] 思路 回溯法 1、一开始,字符串的长度小于 4 或者大于 12 ,一定不能拼凑出合法的 ip 地址(这一点可以一般化到中间结点的判断中,以产生剪枝行为); 2、每一个结点可以选择截取的方法只有 3 种:截 1 位、截 2 位、截 3 位,因此每一个结点可以生长出的分支最多只有 3 条分支; 根据截取出来的字符串判断是否是合理的 ip 段,这里写法比较多...

阅读更多

排序算法

一些算法举例 排序算法 首先看一张图: 这里就不多解释了,下面抽几个排序简单讲下。 成功 信息 Warning Text. Error Text. success info warning error 冒泡排序 算法步骤 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一队到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 动图演示 代码实现: func bubleSort(source: inout [Int]) -> [Int] { pri...

阅读更多

开发过程中的UI差异(flutter版)

开发过程中的UI差异(flutter版) 一个App的从无到有一定绕不开UI的还原问题,通常有设计师设计好根据时下主流的机型产出UI稿交于开发人员去还原视觉稿。比如设计稿的规范为:375(width)667(height)。通常开发人员按照设计稿设置的控件(10040)以及字体fontSize:18。但是经常会有设计师来说,怎么Android和iOS上面的表现形式不一样呢?或者怎么oppo上面的字号显得比较大呢?其实,底层逻辑都是由于物理设备到开发语言的映射差异化导致的。 原理介绍 几个名词 屏幕尺寸 屏幕尺寸(screen size),是屏幕的对角线长度,一般讲的大小单位都是英寸。 DPI (dots per inch)   dpi 是(英文Dots Per Inch)...

阅读更多

flutter开发初探

flutter开发初探 作为时下最火的跨端技术,虽然现在才能才入局有点晚的感觉,但是本人是喜欢稳定版的,目前1.22.x也已经官方release了,这篇初探就简单记录下,一枚小白的使用心得和入门吧 国际惯例 摆出这张图,还是简单从整体上来先认识了一下什么是 Flutter,否则容易陷入“盲人摸象”的境地。 Embedder 操作系统适配层,提供线程模型,事件循环模型 Engine:和底层OS无关了,一般是渲染层包括了 Skia 图形绘制库、Dart VM、Text 等,其中 Skia 和 Text 为上层接口提供了调用底层渲染和排版的能力 Framework:是一个用 Dart 实现的 UI SDK,从上之下包括了两大风格组件库(iOS和Android)、基础...

阅读更多