Software Engineering

Leetcode 93 swift

https://leetcode.com/problems/restore-ip-addresses/ 先使用方法intToType算出给定一个字符串能够组成ip的所有排列组合比如[2,3,2,3]代表按这样的形式分割字符串生成ip。可以看到我的方法已经穷举了所有可能,default里面也有对应的算法,只是穷举出来速度更快,大概提高了13%。因为这里场景范围比较小,将每个值带入就可以穷举出值。现在的算法还有几个可以优化的地方。比如知道第一位不为一个长度为3的字符串之后,后续的第一个就可以排除长度为3的。 class Solution { func restoreIpAddresses(_ s: String) -> [String] { guard s.count <

  • Jin Black
    Jin Black
5 min read
Software Engineering

Leetcode 94 swift

https://leetcode.com/problems/binary-tree-inorder-traversal/ 递归一般写起来比较方便,使用循环和递归一般是比较常规的写法。一般写程序递归要避免,但是对于二叉树来说,递归的写法实在太过方便。可以看看它的答案,有3中写法。 func inorderTraversal(_ root: TreeNode?) -> [Int] { guard let r = root else { return [] } return inorderTraversal(r.left) + [r.val] + inorderTraversal(r.

  • Jin Black
    Jin Black
1 min read
Software Engineering

程序设计的几大原则,类之间的关系

开闭原则:保证程序的可扩展性,是其他原则的基石。 单一原则:就一个类来说,应该仅有一个引起它变化的原因。如何一个类承担的职责过多,就等于把这些职责耦合起来,这种耦合会导致设计很脆弱。 代替原则(里氏替换原则):派生类(子类)对象能够替换其基类(父类)对象被调用。 依赖倒转原则:程序设计应该依赖抽象接口,而不应该依赖具体实现。 接口隔离原则:使用多个隔离接口比单个接口要好,还要降低类之间的耦合度。因为越小的借口,就越好实现,复用性也越高。 最少原则(迪米特法则):一个实体应当尽可能少的与其他实体之间发生相互作用。这样做的目的在于减少依赖,独立功能,以便更好的复用。 合成/聚合复用原则:

  • Jin Black
    Jin Black
2 min read
Software Engineering

基于HTTP的功能追加协议

因为HTTP协议上的限制以及自身性能有限。一些协议是基于HTTP的,并在此基础上添加了新的功能。 消除HTTP瓶颈的SPDY,Google在2010年发布了SPDY缩短了Web页面的加载时间50% Ajax解决方法:请求返回部分更新内容,缺点是可能需要大量请求,且未解决HTTP协议本身存在的问题。 Comet解决方法:延迟应答,模拟实现服务器向客户端推送(Server Push)的功能。未解决HTTP协议本身存在的问题。 SPDY:SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层与运输层之间通过新的会话层的形式运作,控制对数据的流动。同时,考虑到安全性问题,SPDY规定通信中使用SSL。 使用SPDY后,HTTP协议额外获得一下功能。 多路复用流:通过单一的TCP连接,可以无限制处理多个HTTP请求。所有请求的处理都在一条TCP连接上完成,因此TCP的处理效率得到提高。 赋予请求优先级:SPDY不仅可以无限制地并发处理请求,

  • Jin Black
    Jin Black
4 min read
Software Engineering

Leetcode 98. Validate Binary Search Tree swift S: 100% M: 76.92%

https://leetcode.com/problems/validate-binary-search-tree/ 测试发现,将方法写在class作用域内的内存消耗远远小于放在func内,以后用递归思路实现的swift算法尽量还是将func移出来。二是有点奇怪,我测试python和swift速度,一般来说算法都是python较快,不知道为何,讲道理不应该。 class Solution { func isValidBST(_ root: TreeNode?) -> Bool { return isValidBST(root, .min, .max) } func isValidBST(_ node: TreeNode?, _ min: Int,

  • Jin Black
    Jin Black
1 min read

Subscribe to All 4 Tomorrow - JinBlack's Sharing