@@ -2219,61 +2219,102 @@ drop直接删掉表,truncate删除表中数据,再插入时自增长id又从
2219
2219
## 数据结构
2220
2220
### 222.数组中出现次数超过一半的数字-Python版
2221
2221
### 223.求100以内的质数
2222
+ ### 224.无重复字符的最长子串-Python实现
2223
+ ### 225.通过2个5/6升得水壶从池塘得到3升水
2224
+ ### 226.什么是MD5加密,有什么特点?
2225
+ ### 227.什么是对称加密和非对称加密
2226
+ ### 228.冒泡排序的思想?
2227
+ ### 229.快速排序的思想?
2228
+ ### 230.如何判断单向链表中是否有环?
2229
+ ### 231.你知道哪些排序算法(一般是通过问题考算法)
2230
+ ### 232.斐波那契数列
2231
+
2232
+ ** 数列定义: **
2233
+
2234
+ f 0 = f 1 = 1
2235
+ f n = f (n-1) + f (n-2)
2236
+
2237
+ #### 根据定义
2222
2238
2223
- 方法一: 直接写
2239
+ 速度很慢,另外(暴栈注意!⚠️️) ` O(fibonacci n) `
2224
2240
2225
2241
``` python
2226
- primes = 3 , 5 , 7 , 9 , 11 , 13 , 15 , 17 , 19 , 23 , 25 , 29 , 31 , 35 , 37 , 41 , 43 , 47 , 49 , 53 , 59 , 61 , 67 , 71 , 73 , 79 , 83 , 89 , 97
2242
+ def fibonacci (n ):
2243
+ if n == 0 or n == 1 :
2244
+ return 1
2245
+ return fibonacci(n - 1 ) + fibonacci(n - 2 )
2227
2246
```
2228
2247
2229
- 方法二: 简单算
2248
+ #### 线性时间的
2249
+
2250
+ ** 状态/循环**
2230
2251
2231
2252
``` python
2232
- def is_prime (n ):
2233
- """ Check if number n is a prime."""
2234
- if n == 1 or not (n & 1 ):
2235
- return False
2236
- if n == 2 :
2237
- return True
2238
- for i in range (3 , int (pow (n, 0.5 )), 2 ):
2239
- if n % i == 0 :
2240
- return False
2241
- return True
2253
+ def fibonacci (n ):
2254
+ a, b = 1 , 1
2255
+ for _ in range (n):
2256
+ a, b = b, a + b
2257
+ return a
2258
+ ```
2242
2259
2243
- primes = tuple (filter (is_prime, range (2 ,100 )))
2260
+ ** 递归**
2261
+
2262
+ ``` python
2263
+ def fibonacci (n ):
2264
+ def fib (n_ , s ):
2265
+ if n_ == 0 :
2266
+ return s[0 ]
2267
+ a, b = s
2268
+ return fib(n_ - 1 , (b, a + b))
2269
+ return fib(n, (1 , 1 ))
2244
2270
```
2245
2271
2246
- 方法三: Eratosthenes 筛 (速度想更快的话,不用 dict 而用 bytearray)
2272
+ ** map(zipwith) **
2247
2273
2248
2274
``` python
2249
- from itertools import takewhile
2275
+ def fibs ():
2276
+ yield 1
2277
+ fibs_ = fibs()
2278
+ yield next (fibs_)
2279
+ fibs__ = fibs()
2280
+ for fib in map (lambad a, b: a + b, fibs_, fibs__):
2281
+ yield fib
2282
+
2283
+
2284
+ def fibonacci (n ):
2285
+ fibs = fibs()
2286
+ for _ in range (n):
2287
+ next (fibs)
2288
+ return next (fibs)
2289
+ ```
2290
+
2291
+ #### Logarithmic
2250
2292
2251
- sets = {n: True for n in range (2 , 100 )}
2252
- for n in takewhile(lambda x : x * x < 100 , sets):
2253
- if sets[n]:
2254
- for n_ in range (n * n, 100 , n):
2255
- sets[n_] = False
2293
+ ** 矩阵**
2256
2294
2257
- primes = tuple (map (lambda n : n[0 ], filter (lambda x : x[1 ], sets.items())))
2295
+ ```
2296
+ import numpy as np
2297
+ def fibonacci(n):
2298
+ return (np.matrix([[0, 1], [1, 1]]) ** n)[1, 1]
2258
2299
```
2259
2300
2260
- 方法四: 现有的库,比如: sympy
2301
+ ** 不是矩阵 **
2261
2302
2262
2303
``` python
2263
- import sympy
2264
- primes = tuple (sympy.primerange(0 , 100 ))
2304
+ def fibonacci (n ):
2305
+ def fib (n ):
2306
+ if n == 0 :
2307
+ return (1 , 1 )
2308
+ elif n == 1 :
2309
+ return (1 , 2 )
2310
+ a, b = fib(n // 2 - 1 )
2311
+ c = a + b
2312
+ if n % 2 == 0 :
2313
+ return (a * a + b * b, c * c - a * a)
2314
+ return (c * c - a * a, b * b + c * c)
2315
+ return fib(n)[0 ]
2265
2316
```
2266
2317
2267
-
2268
- ### 224.无重复字符的最长子串-Python实现
2269
- ### 225.通过2个5/6升得水壶从池塘得到3升水
2270
- ### 226.什么是MD5加密,有什么特点?
2271
- ### 227.什么是对称加密和非对称加密
2272
- ### 228.冒泡排序的思想?
2273
- ### 229.快速排序的思想?
2274
- ### 230.如何判断单向链表中是否有环?
2275
- ### 231.你知道哪些排序算法(一般是通过问题考算法)
2276
- ### 232.斐波那契数列
2277
2318
### 233.如何翻转一个单链表?
2278
2319
### 234.青蛙跳台阶问题
2279
2320
### 235.两数之和 Two Sum
0 commit comments