主页

树算法

一些算法举例 树 树是最常用且非常有用的数据结构之一,通过下图可以很容易理解树的概念。 上图展示的是一个拥有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>? ...

阅读更多

数组算法

一些算法举例 数组 二分插入法 给出一个有序数组(入从小到大),将指定的数字插入合适的位置,返回index。 示例 输入:[1, 2, 3, 4, 6, 7, 8, 9, 10, 10, 11, 18, 76],14 输出:11 思路 上下边界,二分判断,直到下边界>=上边界,退出循环 解法 func binarySearch(insert target: Int, into src: [Int]) -> Int { var left=0, right=src.count-1 while left<=right { let mid=(left+right)/2 let...

阅读更多

字符串算法

一些算法举例 字符串 复原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)、基础...

阅读更多

一些相关知识点

对称加密 定义 对称加密是指加密和解密的密匙为同一个,用来加密数据的密匙也可以用来解密 特点 加密速度快,使用简单 对称加密的破解难度是随着钥匙的大小增加而增加的,钥匙越大就越难破解,但是钥匙越大相应的解密的时间也会越长 对称加密的问题 双方都必须先约定好加密规则 秘钥数目难于管理。因为对于每一个合作者都需要使用不同的秘钥,很难适应开放互联网中的大量的合作者交流。 无法适用于陌生的网络的环境,双方都必须是可信任的才可进行。 非对称加密 定义 非对称加密的秘钥是成对的(公钥和私钥)。私钥由自己安全保管不外泄,而公钥则可以发给网络中的任何人。 非对称加密适用这对秘钥中的一个进行加密,而解密则需要另一个秘钥。根据公钥是无法推导出私钥的。 特点...

阅读更多