问题描述 业务有一个需求,我把问题描述一下: 通过代理IP访问国外某网站N,每个IP对应一个固定的网站N的COOKIE,COOKIE有失效时间。 并发下,取IP是有一定策略的,取到IP之后
顺晟科技
2021-06-16 10:39:48
370
文章目录判断字符数组中的所有字符是否只出现过一次,判断字符是否。时间复杂度O(N)算法思维对应代码空间复杂度O(1)算法思维对应代码
判断字符数组中的所有字符是否只出现一次
判断一个字符是否
[标题]
给定一个字符类型数组chas[],判断chas中的所有字符是否只出现一次,
[示例]
Chas=['a ',' b ',' c'],返回True;Chas=['1 ',' 2 ',' 1'],返回False。
[要求]
根据以下两种不同的要求
实现了时间复杂度为0(N)的方法。
在额外空间复杂度为O(1)的前提下,请尽量实现时间复杂度更低的方法。
对时间复杂度O(N)算法的思考
字典/集合/列表统计,
发现再次重复统计,否则字符是的
时间复杂度为O(N)O(N)O(N),空间复杂度为O(N)O(N)O(N)
对应代码
#判断字符,时间复杂度O(N),空间复杂度O(N)
def _ unique _ time _ first(arr):
d={}
对于I在范围内(len(arr)):
如果在d:中arr[i]
False返回
else:
d[arr[i]]=1
返回真
#简单测试
if __name__=='__main__':
chas=['a ',' b ',' c']打印(is _ unique _ time _ first(chas))# True
chas=['1 ',' 2 ',' 1']打印(is _ unique _ time _ first(chas))# False
空间复杂度O(1)算法
先排序,然后检查相邻字符是否相同。如果相同,则重复,否则字符是的
选择排序,冒泡排序,插入排序,时间复杂度O(n ^ 2),空间复杂度O(1),满足条件
堆排序,时间复杂度O(NlogN),空间复杂度O(1),满足条件
快速排序,时间复杂度O(NlogN),空间复杂度最小O(logN)
归并排序,时间复杂度O(NlogN),需要辅助数组,空间复杂度O(N)
桶排序、基数排序、计数排序等非比较排序的时间复杂度为O(N),但需要额外的空间,与数据情况有关,不满足条件
所以更好使用堆排序,时间复杂度O(NlogN)O(NlogN)O(NlogN)空间复杂度O(1)O(1)O(1)
对应代码
#判断性,空间复杂度O(1),时间复杂度O(NlogN)
def _ unique _ space _ first(arr):
堆排序(arr)
对于范围内的I(1,len(arr)):
if arr[i]==arr[i - 1]:
False返回
返回真
#堆排序
def堆排序(arr):
#建立一个大的根堆
对于I在范围内(len(arr)):
heap_insert(arr,I)
#弹出根堆的顶部,按升序排序
对于I在范围内(len(arr)):
交换(arr,0,len(arr) - 1 - i)
heapify(arr,0,len(arr) - 1 - i)
#在根堆的底部插入
def heap_insert(arr,index):
parent=(index - 1) //2
而parent=0且arr[index] arr[parent]:
交换(arr,index,parent)
索引=父
parent=(index - 1) //2
#砧木顶部调整
def heapify(arr,index,size):
left=2 * index 1
而左arr[index]:
if left 1 arr[left]:
交换(arr,index,left 1)
索引=左1
else:
交换(arr,index,left)
索引=左
elif左1 arr[index]:
交换(arr,index,left 1)
索引=左1
else:
破裂
left=2 * index 1
#交换两个号码
def swap(arr,I,j):
temp=arr[I]arr[I]=arr[j]arr[j]=temp
#简单测试
if __name__=='__main__':
#堆排序测试
arr=[5,3,7,1,4] heap_sort(arr)
打印(arr)
打印()
arr=[1,3,4,2,5] heap_sort(arr)
打印(arr)
打印()
arr=[8,5,2,9,4,2,9,9,6,8,9,1,6,3,4,5,9,6,8,5,7,3,5,6,6,7,9,6,4,8,9,4,7,5,9,2,
2, 6, 1, 8, 3, 2, 5, 4, 6, 6, 7, 2, 1, 5, 7, 1, 7, 3, 2, 6, 1, 9, 6, 2, 3, 4, 9, 1, 3, 1, 6, 8, 1, 3, 1, 2,
2,5,6,2,1,4,3,5,6,8,1,8,9,1,8,1,8,3,4,4,3,1,9,6,9,5,8,7] heap_sort(arr)
打印(arr)
打印()
chas=['a ',' b ',' c ']print(is _ unique _ space _ first(chas))# True
chas=['1 ',' 2 ',' 1']打印(is _ unique _ space _ first(chas))# False
28
2021-08
28
2021-08
16
2021-06
16
2021-06
16
2021-06
16
2021-06