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))