每日一题之计数质数

计数质数

统计所有小于非负整数 n 的质数的数量。

示例:

1
2
3
输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
阅读全文
设计模式十二之责任链模式

责任链模式

​ 将能够处理同一类请求的对象连成一条链,所提交的请求将沿着这条链传递,链上的对象逐个判断是否有能力处理该请求,如果有则处理,如果没有则将请求传递给下一个对象处理。

阅读全文
每日一题之移除链表元素

移除链表元素

删除链表中等于给定值 val 的所有节点。

示例:

1
2
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
阅读全文
设计模式十一之享元模式

享元模式

​ 内存属于稀缺资源,不能随意浪费。如果在一个系统中有很多个完全相同或相似的对象,我们就可以使用享元模式,让他们共享一份内存即可,不必每个都去实例化对象,从而节省内存空间。

模式核心

  1. 享元模式以共享的方式高效的支持大量细粒度对象的重用。
  2. 享元对象能做到共享的关键是区分了内部状态外部状态
    • 内部状态:可以共享,不会随环境改变而改变。
    • 外部状态:不可以共享,会随环境改变而改变。
阅读全文
每日一题之快乐数

快乐数

编写一个算法来判断一个数是不是“快乐数”。

一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。

示例:

1
2
3
4
5
6
7
输入: 19
输出: true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
阅读全文
设计模式十之外观模式

外观模式

外观模式(也称为门面模式)定义了一个高层接口,为子系统中的一组接口提供了一个一致的界面,从而使得这一组子系统更加容易使用。
​ 这个模式很好的遵循了迪米特法则(最少知识法则),即一个软件应当尽可能少的与其他实体发生相互作用。

阅读全文
每日一题之打家劫舍

打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

示例 1:

1
2
3
4
输入: [1,2,3,1]
输出: 4
解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
偷窃到的最高金额 = 1 + 3 = 4 。

示例 2:

1
2
3
4
输入: [2,7,9,3,1]
输出: 12
解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
偷窃到的最高金额 = 2 + 9 + 1 = 12 。
阅读全文
设计模式九之装饰模式

装饰模式

​ 装饰(Decorate)模式又称为包装(Wrapper)模式。装饰模式是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。

阅读全文
Algolia