题目内容:
一开始给出了一个由小写字母组成的字符串 S。我们规定每次移动中,选择最左侧的字母,将其从原位置移除,并加到字符串的末尾。这样的移动可以执行任意多次
返回我们移动之后可以拥有的最小字符串(注:在Python3中,字符串的大小可用不等号比较)。
输入格式:
S。S为仅含有小写字母的字符串,长度不超过100000。
输出格式:
一个与S等长的字符串。
输入样例:
“cba”
输出样例:
acb
第一种方法是先将字符串设置为最小值,接着利用队列将第一个字母出队再入队然后与最小字符串比较,将小的那个字符串替换为最小值,直到将字符串所有情况都遍历一遍,但是该题有程序运行时间限制,所以采用第二种方法。
第二种方法是利用切片直接将字符串第一个字母移到最后,然后进行比较找出最小值。
def func(s):
min = s
for j in range(len(s)):
s = s[1:] + s[0]
if s < min:
min = s
return min
S = eval(input())
print(func(S))
题目内容:
计算每个事件发生之时,往前算10000毫秒内有多少个事件发生,包含当事件;也即对于列表中的每个元素k,算出整个列表中有多少个元素介于k-10000和k(两端均含)之间。
输入格式:
一个已排序列表mylist,所有元素为非负整数,记录各个请求的发生时间,单位为毫秒。
输出格式:
一个与mylist等长的列表。
输入样例:
[0,10,100,1000,10000,20000,100000]
输出样例:
[1,2,3,4,5,2,1]
第一种方法是遍历列表,将位于当前元素k之前的元素都判断一次是否大于k-10000,记录大于k-10000的元素个数,该个数加上位于元素k之后的与k相等的元素数量即为处于范围之间的元素个数,但该题也有程序运行时间限制,所以我们采用第二种方法。
第二种方法是创建一个新的队列,将mylist中的元素一个一个添加进去,每添加一个新元素k都循环判断新元素与队尾元素相减是否大于10000,如果大于10000则将队尾元素出队,队列长度加上列表中位于元素k之后的与k相等的元素数量即为处于范围之间的元素个数。
def func(mylist):
output = []
new_list = [] # 用列表来模拟队列
for i in range(len(mylist)):
new_list.append(mylist[i])
while new_list[-1] - new_list[0] > 10000:
new_list.pop(0)
count = 0
for j in range(i+1, len(mylist)):
if mylist[j] == mylist[i]:
count += 1
else:
break
output.append(len(new_list)+count)
return output
mylist = eval(input())
print(func(mylist))
题目内容:
实现一个基数排序算法,用于10进制的正整数从小到大的排序。
思路是保持10个队列(队列0、队列1…队列9、队列main),开始,所有的数都在main队列,没有排序。
第一趟将所有的数根据其10进制个位(09),放入相应的队列09,全放好后,按照FIFO的顺序,将每个队列的数合并排到main队列。
第二趟再从main队列队首取数,根据其十位的数值,放入相应队列0~9,全放好后,仍然按照FIFO的顺序,将每个队列的数合并排到main队列。
第三趟放百位,再合并;第四趟放千位,再合并。
直到最多的位数放完,合并完,这样main队列里就是排好序的数列了。
输入格式:
一个列表mylist,其中mylist包含一些需要排序的正整数,正整数互不相同且均不超过100000,且个数在1至1000之间。
输出格式:
一个与mylist等长的列表。
输入样例:
[8, 91, 34, 22, 65, 30, 4, 55, 18]
输出样例:
[4, 8, 18, 22, 30, 34, 55, 65, 91]
利用字典来构建九个队列,先计算出列表中最大值的位数,接着循环位数次,每次都将列表中元素按其当前位的数值放入九个队列中,然后再按先进先出的原则放回原列表中。
def func(mylist):
n = 1
while max(mylist) >= 10**n:
n += 1
for i in range(n):
dict = {}
for x in range(10):
dict.setdefault(x, [])
for y in mylist:
radix = (y/(10**i))%10
dict[radix].append(y)
index = 0
for x in range(10):
if dict[x] != []:
for y in dict[x]:
mylist[index] = y
index += 1
return mylist
mylist = eval(input())
print(func(mylist))