数据结构与算法Python版-第八周作业

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值