源于github上的一个10k+star项目
本系列记录思路,以作备忘
array 数组
- delete_nth
删除第n次出现的元素
import collections
#input = [1,2,3,1,2,1,2,3]
#target = [1,2,3,1,2,3]
# 因count实现为遍历对象,构建dict返回,故时间复杂度为O(n^2)
def delete_nth_naive(array,n):
ans = []
for num in array:
if ans.count(num) < n:
ans.append(num)
return ans
#使用collections.defaultdict实际上是相当于自己实现了count方法构建了dict,时间复杂度O(1), 总时间复杂度为O(n)
def delete_nth(array, n):
result = []
counts = collections.defaultdict(int)
for i in array:
if counts[i] < n:
result.append(i)
counts[i] += 1
return result
- flatten
数组降维
from collections import Iterable
# 递归思想实现数组降维,返回list
def flatten(input_arr, output_arr=None):
if output_arr is None:
output_arr = []
for ele in input_arr:
if isinstance(ele, Iterable):
flatten(ele, output_arr)
else:
output_att.append(ele)
return output_arr
# 递归思想实现数组降维,返回generator, 好处惰性加载,节约内存
def flatten_iter(iterable):
for element in iterable:
if isinstance(element, Iterable):
yield from flatten_iter(element)
else:
yield element
#ps.python默认最大递归次数为1000,