10.16周赛
以下都是我个人的思路哈,可能时间复杂度为非常高,还请各位大佬指点!
奇偶排序
'''
给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数
'''
思路
每次判断一个元素的奇偶性,奇偶分别存入两个不同的列表,最后让两个列表合并即可。
代码实现
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, arr):
result = None
# TODO: 请在此编写代码
result = []
result2,oushu,jishu = [],[],[]
for i in range(n):
if arr[i] % 2 == 0:
oushu.append(arr[i])
else:
jishu.append(arr[i])
result2 = jishu + oushu
for j in result2:
q = '%d' % j
result.append(q)
return result
if __name__ == "__main__":
n = int(input().strip())
arr = [int(item) for item in input().strip().split()]
s = Solution()
result = s.solution(n, arr)
print(" ".join(result))
小艺照镜子
'''
已知字符串str。 输出字符串str中最长回文串的长度。
'''
思路
利用列表切片遍历所有可能可能,再用reversed()函数将其倒序,与倒序之前的进行比较
代码实现
class Solution:
def __init__(self) -> None:
pass
def solution(self, s):
result = None
# TODO: 请在此编写代码
l = []
s = list(s)
n = len(s)
for i in range(n):
for j in range(i+1,n+1):
b = s[i:j]
c = reversed(b)
d = ''.join(b)
e = ''.join(c)
if d == e:
l.append(len(d))
result = max(l)
return result
if __name__ == "__main__":
a = input().strip()
s = Solution()
result = s.solution(a)
print(result)
交换后的or
'''
给定两组长度为n的二进制串,请问有多少种方法在第一个串中交换两个不同位置上的数字,使得这两个二进制串“或”的结果发生改变?
'''
思路
这题卡了较长时间,问题出在输入的格式是一个str类型,如何与二进制转换就是一个问题。随后笔者决定就从每一位去看这两个数或的结果,不一起看 ,这样就避开了转换。
代码实现
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, str1, str2):
# TODO: 请在此编写代码
result = None
str11 = list(str1)
str22 = list(str2)
a = []
for i in range(n):
a2 = int(str11[i]) | int(str22[i])
a.append(a2)
result = 0
for i in range(n):
for j in range(i+1,n):
b = []
str3 = list(str1)
str3[i],str3[j] = str3[j],str3[i]
for k in range(n):
b2 = int(str3[k]) | int(str22[k])
b.append(b2)
if a != b:
result += 1
return result