python全排序算法题_python面试题 算法排序

手写:已知一个长度n的无序列表,元素均是数字,要求把所有间隔为d的组合找出来,你写的解法算法复杂度多少;

def func(x, d):

L = []

n = len(x)

if n < d:

return None

a = d

while a < n:

r = []

r.append(x[a-d])

r.append(x[a])

L.append(r)

a = a + 1

return L

list1 = [x for x in range(100)]

print(func(list1, 10))

手写:用一行python写出1+2+3+…+10**8 ;

print(sum([x for x in range(1, 10**8+1)]))

#或者

from functools import reduce

print(reduce(lambda x, y : x + y, [x for x in range(1, 10**8+1)]))

手写python:用递归的方式判断字符串是否为回文;

def isHuiWen(string):

if len(string) < 2:

return True

if string[0] != string[-1]:

return False

return isHuiWen(string[1:-1])

string = input('请输入一个字符串')

if isHuiWen(string):

print('回文')

else:

print('非回文')

手写:一个长度n的无序数字元素列表,如何求中位数,如何尽快的估算中位数,

def centre(list1):

if len(list1) <= 1:

return list1

list1.sort()

n = len(list1) % 2

m = len(list1) // 2

if n == 0:

return (list1[m] + list1[m-1])/2

return list1[m]

list1 = [1,3,2,5,4]

print(centre(list1))

二分查找

"""

1. 二分查找是有条件的,首先是有序,其次因为二分查找操作的是下标,所以要求是顺序表

2. 最优时间复杂度:O(1)

3. 最坏时间复杂度:O(logn)

"""

list1 = [1, 2, 3, 4, 5, 6, 7]

# 递归二分查找

def select(lis, data):

n = len(lis)

if n < 1:

return False

mid = n // 2

if lis[mid] > data:

return select(lis[0:mid], data)

elif lis[mid] < data:

return select(lis[mid+1:], data)

else:

return True

print(select(list1, 6))

# 非递归二分查找

def select(lis, data):

n = len(lis)

first = 0

last = n - 1

while first <= last:

mid = (first + last) // 2

if lis[mid] > data:

last = mid - 1

elif lis[mid] > data:

first = mid + 1

else:

return True

return False

print(select(list1, 3))

关于递归中return分到None,按照错误写法来介绍,因为return的string实际上是return上一次递归的结果,但是上一次递归并没有返回值,所以是None

题目:一个随机的字符串,删除所有的ac和b,例如aacbca -> a

# 错误写法

def test(string):

if 'ac' in string:

test(string.replace('ac', ''))

elif 'b' in string:

test(string.replace('b', ''))

else:

return string

# 正确写法

def test(string):

if 'ac' in string:

return test(string.replace('ac', ''))

elif 'b' in string:

return test(string.replace('b', ''))

else:

return string

判断A和B相似,所有数字出现的次数一样即相似。例如:123123和132312相似。

def is_like(A, B):

a_n = len(A)

b_n = len(B)

if a_n != b_n:

return False

for a in A:

if A.count(a) != B.count(a):

return False

return True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值