1. 字符串中所有重排(10分)
题目内容:
给定一个字符串s与待查找字符串p,请给出使得s[i:i+len§]是p的一个字母重排的所有下标i
题目保证字符串p非空
输入格式:
两行字符串,第一行为s,第二行为p
输出格式:
所有满足条件的下标从小到大排列,以空格分隔输出
若无对应下标,则输出"none"
输入样例:
cbaebabacd
abc
输出样例:
0 6
参考代码模板:
def findAnagrams(s, p):
# code here
pass
s = input()
p = input()
findAnagrams(s, p)
时间限制:1000ms内存限制:32000kb
s = input()
p = input()
ls, lp = len(s), len(p)
l = []
for i in range(ls-lp):
sub = "".join(str(alp) for alp in sorted(s[i:i+lp]))
if sub == p:
l.append(i)
if l:
print(" ".join(str(alp) for alp in l))
else:
print("none")
2. 列表出现最频繁的元素(10分)
题目内容:
给定一个列表与数字K,按出现次数倒序输出列表中前K个出现最频繁的元素;若少于K个元素则返回所有元素
输入格式:
输入为两行
第一行为给定列表,以合法的Python表达式给出
第二行为数字K
输出格式:
不多于K个数字,以空格分隔
输入样例:
[1,1,1,2,2,3]
2
输出样例:
1 2
参考代码模板:
def topKFrequent(nums, k):
# code here
pass
lst = eval(input())
k = int(input())
topKFrequent(lst, k)
时间限制:1000ms内存限制:32000kb
def topKFrequent(nums, k):
dct = {}
for x in nums:
dct[x] = dct.get(x, 0) + 1
# 取key=x的值,如果没有就设置为0
result = sorted(dct.items(), key=lambda x: -x[1])
# 将数字及其重复次数组成的元组,按照-x[1],即次数倒序排序
result = [x[0] for x in result[:k]]
print(*result)
lst = eval(input())
k = int(input())
topKFrequent(lst, k)
这个小小解释一下result的操作:
- 将字典d按value的值进行排序
key=lambda x: x[1]
实现 - sorted(d.items(), key=lambda x: x[1]) 中 d.items() 为待排序的对象;
- key=lambda x: x[1] 为对前面的对象中的第二维数据(即value)的值进行排序。
- key=lambda 变量:变量[维数] 。维数可以按照自己的需要进行设置。
3. 散列表(10分)
题目内容:
给定一个指定大小N的散列表,并输入一系列数字:若找到空槽,则插入该数字,并返回槽位置;若该数字在散列表中存在,则直接输出其位置。
注:使用下标增加的二次探测法解决散列冲突
注2:散列表实际大小应确定为不小于用户输入N的最小质数
输入格式:
两行
第一行为用户指定散列表大小N
第二行为一系列数字,以空格分隔
输出格式:
逐个输出对应数字在散列表中位置,以空格分隔
若该数字无法插入,则输出“-”
输入样例:
4
10 6 4 10 15
输出样例:
0 1 4 0 -
参考代码模板:
def createHashTable(n):
# code here
pass
def insertNumbers(table, nums):
# code here
pass
n = int(input())
nums = list(map(int, input().split()))
table = createHashTable(n)
insertNumbers(table, nums)
时间限制:1000ms内存限制:32000kb
def createHashTable(n):
# 这里需要找出不小于n的最小质数
if n==1 or n==2:
slots = 2
else:
for i in range(2, n):
if n % i == 0:
n = n + 1
else:
slots = n
table = {x:None for x in range(slots)} # 初始化哈希表
return table
def insertNumbers(table, nums):
# 逐个将数字填入hash table,并保存其位置就可以了
length = len(table)
for i in range(len(nums)):
num = nums[i]
key = num % length
if table[key] == None:
table[key] = num
nums[i] = key
elif table[key] == num:
nums[i] = key
else:
nums[i] = "-"
print(" ".join(str(x) for x in nums))
N = int(input())
nums = list(map(int, input().split()))
table = createHashTable(N)
insertNumbers(table, nums)