PHP 请小心判断 strpos

有开始写世界上最后的语言 PHP 了(狗头保命)。一个很简单的字符串是否包含判断就掉坑了。

方法签名:

strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int

寻找数组中轴索引

find-pivot-index

将 pivot 索引定义为:左边的数字之和等于索引右边的数字之和。

Input:
nums = [1, 7, 3, 6, 5, 6]
Output: 3
Explanation:
1 + 7 + 3 = 5 + 6

Input:
nums = [1, 2, 3]
Output: -1
Explanation:
There is no index that satisfies the conditions in the problem statement.

超长阶乘的计算

extra-long-factorials

打印 n! 的结果(1 <= n <= 100)。注意:当 n > 20 时 64 位的 Int 将无法直接存储结果。

思路

  • 将大数字用 数组 形式表示。比如 987 使用 [9,8,7] 代替。
  • 每一位乘以 n,再进行进位操作,得到新数组。

fastlane 入门使用

fastlane-getting-started

这次以 fastlane 为例,尝试项目中有什么事情可以被自动完成。

fastlane 是 Ruby scripts 的集合,安装方法不多说了见 官网文档

fastlane 中有但不限于以下工具集:

  • produce 同时在 Apple Developer Portal 和 App Store Connect 中创建新的 iOS apps。
  • cert 自动创建和维护 iOS 签名证书。
  • sigh 创建,更新,下载和修复配置文件。
  • snapshot 自动在每台设备上获取 iOS 应用的本地化屏幕截图。
  • frameit 将您的屏幕截图放入正确的设备框架中。
  • gym 构建和打包您的 iOS apps。
  • deliver 将截图,元数据和您的应用上传到 App Store。
  • pem 自动生成并更新推送通知配置文件。
  • spaceship 一个 Ruby 库能够访问苹果开发者中心和应用商店连接 api。
  • pilot 自动化 TestFlight 部署并管理测试用户。
  • boarding 邀请 beta 测试人员。
  • match 使用Git同步整个团队的证书和配置文件。
  • scan 运行 app 测试。

PromiseKit 入门使用

promisekit-getting-started

在 GitHub Trending 中总是看到 mxcl/PromiseKit 它是主要解决的是 “回调地狱” 的问题,决定尝试用一下。

环境:Swift 4.2、PromiseKit 6

then and done

下面是一个典型的 promise 链式(chain)调用:

firstly {
login()
}.then { creds in
fetch(avatar: creds.user)
}.done { image in
self.imageView = image
}

二分查找 Binary Search

binary-search

快速从一个数组中查找一个元素。

Linear Search 线性查找

func linearSearch<T: Equatable>(_ a: [T], _ key: T) -> Int? {
for i in 0 ..< a.count {
if a[i] == key {
return i
}
}
return nil
}

线性查找在最坏情况:遍历了整个数组,但没有找到合适的元素。平均要遍历一半的元素性能为 O(n),而二分查找的效率为 O(log n),也就是说一个有 1,000,000 元素的数组只需要 20 步就可以找到想要的元素 log_2(1,000,000) = 19.9

插入排序 Insertion Sort

queue-data-structure

将一个数组从高到低或者从低到高排序。

插入排序算法的工作原理:

  1. 将若干数字放在一个数组里,数组是乱序的。
  2. 从数组中挑选一个数字,它是哪个并不重要,但是为了方便我们挑选数组头部的这个。
  3. 将这个数字插入到一个新的数组里。
  4. 从乱序数组里挑选下一个数字也将它放到新数组里。这个数字要么在第一个数字前或者后,所以这个两个数字是被排序的。
  5. 再次重从乱序数组里挑选下一个数字也将它放到新数组里,并将数字放在正确的位置。
  6. 一直如此进行直到乱序数组中没有数字。这时也将等到一个排序好的新数组。

队列 Queue Data Structure

queue-data-structure

实现一个 队列,包括 enqueuedequeuepeek

Queue

队列 核心也是 array,A queue gives you a FIFO or first-in, first-out order. 队列是:先进先出的。

public struct Queue<T> {    
fileprivate var array = [T]()
}