18910140161

Python判断字符数组中是否所有的字符都只出现过一次

顺晟科技

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

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航