下文是我面试过程中遇到的算法题,可以给大家做个参考,如果有其他常见算法题可以评论下来,我会及时补充更新.
arr = [7, 11, 2, 13, 4, 32, 12, 1, 3, 5, 66, 37, 8, 6]
s = '1213asdasd1123ssaaa'
def case1():
# 冒泡排序
pass
def case2():
# 二分之一查找
pass
def case3():
# 找出列表里那两个值相加=k,打印下标
pass
def case4():
# 判断是否是回文
pass
def case5():
# 找出字符串中重复的字符串,并记录重复的次数
pass
def case6():
# 找出字符串中重复的字符串,并记录重复的次数
pass
def case7():
# 随机去掉列表里任意一个数字,打印出去掉了几个,去掉的是什么
pass
def case8():
# 取出任意一个数,拼接上5,把5拼接到那个位置得到的数最大
pass
def case9():
# 两个列表下标的值相加,生成一个新的列表,下标不足的保留原来的值
pass
def case10():
# 替换字符串里的任意字符为指定的值
pass
def case11():
# 替换列表里的值
pass
def case12(money=100, nums=10):
# 微信红包
import random
pass
def case13():
# 九九乘法表
pass
def case14():
# 打印出1234中互不相同切无重复的三位数
pass
def case15(date: str):
# 给你一个字符串 `date` ,按 `YYYY-MM-DD` ,返回该日期是当年的第几天。
pass
def case16():
# 两个字符串 S 和 T,求 S 中包含 T 所有字符的最短连续子串的长度。
s = 'ADOBECODEBA1NC1BA'
t = 'ABC'
pass
冒泡排序
def case1():
arr = [11, 2, 13, 32, 12, 1, 5, 66, 37, 8]
for i in range(len(arr)):
for j in range(len(arr)-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
print(arr)
二分之一查找
def case2():
arr = [1,2,3,5,8,11,12,17,22,25,30] # 生成列表
k = 22
l = 0
r = len(arr) -1
while l <= r:
mid = (l + r) // 2
if arr[mid] == k:
print(mid)
return
elif arr[mid] > k:
r = mid -1
else:
l = mid +1
print('没有找到')
找出列表里那两个值相加=k,打印下标
def case3():
arr = [1, 7, 5, 22, 13, 8, 4, 6, 2, 3, 8, 10, 0]
k = 7
for i in range(len(arr)):
for j in range(i+1,len(arr)):
if arr[i] + arr[j] == k:
print(i,j)
判断是否是回文
def case4(x):
if str(x)[::-1] == str(x):
print('yes')
else:
print('no')
找出字符串中重复的字符串,并记录重复的次数
def case5():
s = "adaaaadd11111"
ss = list(set(s)) # 获取一个无序的集合,再转成列表
ss.sort(key=s.index) # 给列表排序
for i in ss:
k = s.count(i) # 找到重复的记录重复次数
print(i,k)
找出字符串中重复的字符串,并记录重复的次数
def case6():
# 字符串去重
s = "adaaaadd11111"
s1 = ''
for i in range(len(s)):
if s[i] not in s1:
s1 += s[i]
# 拿到去重的字符串计算出现的次数
for i in s1:
k = s.count(i)
print(i,k)
随机去掉列表里任意一个数字,打印出去掉了几个,去掉的是什么
def case7():
# 随机去掉列表里任意一个数字,打印出去掉了几个,去掉的是什么
list1 = [2,3,4,5,1,22,5,3,4,46]
list2 = [3,4,5,1,22,3,4]
for i in range(len(list1)):
try:
if list1[i] != list2[i]:
list2.insert(i,None)
print(list1[i])
except IndexError:
print(list1[i])
list2.append(None)
print(list2)
取出任意一个数,拼接上5,把5拼接到那个位置得到的数最大
def case8():
i = -1516
key = list(str(abs(i)))
list2 = []
for i in range(len(key)+1):
list1 = key.copy()
list1.insert(i, '5')
s = ''.join(list1)
list2.append(int(s))
if i < 0:
print(max(list2))
else:
print(-min(list2))
两个列表下标的值相加,生成一个新的列表,下标不足的保留原来的值
def case9():
arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in range(len(arr1) - len(arr2)):
arr2.append(0)
result_list = list(map(lambda x,y: x+y, arr1,arr2))
print(result_list)
case9()
替换字符串里的任意字符为指定的值
def case10():
str1 = 'aaaccnbabc'
print(str1.replace('a', '*'))
替换列表里的值
def case11():
list1 = ['a', 'a', 'a', 'c', 'c', 'n', 'b', 'a', 'b', 'c']
while 'a' in list1:
i = list1.index('a')
list1[i] = '*'
print(list1)
微信红包
def case12(money, nums=10):
# 微信红包
import random
money *= 100
list1 = []
for i in range(nums-1,0,-1):
key = money - i # 保证后面最少能拿到0.01
ren = random.randint(1,key) # 随机整数,避免小数因精度问题导致数值有极小的差异
money -= ren
list1.append(ren / 100)
list1.append(money/100)
print(list1)
print('手气最佳:', max(list1))
九九乘法表
def case13(self):
for i in range(1, 10):
for j in range(1, i+1):
print('{}*{}={}'.format(j, i, i*j), end=' ')
print()
打印出1,2,3,4互不相同且无重复的三位数字
def case14(self):
# 打印出1234中互不相同且无重复的三位数
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if i != j and i != k and j != k:
print("{}{}{}".format(i,j,k))
给你一个字符串date
,按YYYY-MM-DD
,返回该日期是当年的第几天。
def case15(date: str) -> int:
year, month, day = [int(x) for x in date.split("-")]
amount = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
amount[1] += 1
ans = sum(amount[:month - 1])
print(ans + day)
return ans + day
两个字符串 S 和 T,求 S 中包含 T 所有字符的最短连续子串的长度。
def case16():
# 两个字符串 s 和 t,求 s 中包含 t 所有字符的最短连续子串的长度。
s = 'ADOBECODEBA1NC1BA'
t = 'ABC'
check_len = len(t)
for i in range(check_len, len(s) + 1):
for j in range(i, len(s) + 1):
key = s[j - i:j]
if len([True for k in t if k in key]) == check_len:
return key
print(case16())