1、题目名称:订班服
订班服小A班级订班服了! 可是小A是个小糊涂鬼,整错了好多人的衣服的大小。 小A只能自己掏钱包来补钱了。 小A想知道自己至少需要买多少件衣服。
本人代码展示:(第一次参加这个比赛,以为要用考试的格式
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, arr1, arr2):
result = 0
count = {}
for size in arr1:
count[size] = count.get(size, 0) + 1
for size in arr2:
if count.get(size, 0) > 0:
count[size] -= 1
else:
result += 1
return result
if __name__ == "__main__":
n = int(input().strip())
arr1 = [input().strip() for _ in range(n)]
arr2 = [input().strip() for _ in range(n)]
sol = Solution()
result = sol.solution(n, arr1, arr2)
print(result)
这是一个求解“配对问题”的代码。给定两个长度相同的数组arr1和arr2,要求在arr1中找到一个数,使得它在arr2中也出现过,找到一个数后,就从arr1和arr2中同时删除这个数,然后继续找下一个配对。最终返回不能配对的数的个数。
具体来说,这个算法使用一个字典count记录arr1中每个数字出现的次数。然后遍历arr2,对于每个数字,如果在count字典中出现过,就将其对应的计数减1,否则就将result加1。最终返回result即可。其中,`__init__`方法是一个空方法,仅仅是为了让这个类有一个构造函数。
`solution`方法的输入参数包括三个:n表示数组arr1和arr2的长度,arr1和arr2分别是两个长度为n的字符串数组。
首先定义result为0,然后使用一个`count`字典记录arr1中每个数字出现的次数。遍历arr2,如果当前数字在count字典中出现过,则将其对应的计数减1;否则将result加1。最终返回result。
在主函数中,首先读入n,然后使用列表推导式分别读入arr1和arr2。然后创建一个Solution对象,调用它的solution方法,返回结果并输出。
2、题目名称:异或和
小张找到了一个整数 N,他想问问你从 1 到 N 的所有不同整数的异或和是多少, 请你回答他的问题。
本人代码展示:
class Solution:
def __init__(self) -> None:
pass
def solution(self, n):
result = 0
for i in range(1, n+1):
result ^= i
return result
if __name__ == "__main__":
n = int(input().strip())
sol = Solution()
result = sol.solution(n)
print(result)
这是一个求解“缺失数字”问题的程序。给定一个长度为n-1的数组,它包含了从1到n中的n-1个数字。要求找到缺失的那个数字。
这个程序使用异或运算来解决问题。首先将1到n的所有数字进行异或操作,然后对于数组中的每个数字,再进行一次异或操作。由于异或运算满足结合律和交换律,所以最终的结果就是缺失数字与1到n的所有数字进行异或的结果。
其中,`__init__`方法是一个空方法,仅仅是为了让这个类有一个构造函数。
`solution`方法的输入参数只有一个:n,表示1到n中有n个数字。首先将1到n的所有数字进行异或操作,然后对于输入的数组中的每个数字,再进行一次异或操作。最终的结果就是缺失数字与1到n的所有数字进行异或的结果。
在主函数中,首先读入n,然后创建一个Solution对象,调用它的solution方法,返回结果并输出。
3、题目名称:零钱兑换
零钱兑换 给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给 定一个aim,代表要找的钱数,求组成aim的最少货币数。 如果无解,请返回-1. 数据范围:数组大小满足 0 <= n <=10000 , 数组中每个数字都满足 0 < val <=10000,0 <= aim <=100000 要求:时间复杂度 O(n×aim) ,空 间复杂度 O(aim)。
本人代码展示:
import re
class Solution:
def __init__(self) -> None:
pass
def solution(self, arr, aim):
dp = [float("inf")] * (aim + 1)
dp[0] = 0
for i in range(1, aim + 1):
for j in arr:
if j <= i:
dp[i] = min(dp[i], dp[i-j]+1)
return dp[aim] if dp[aim] != float("inf") else -1
if __name__ == "__main__":
input_str = input().strip()
pattern = r"\[(.*?)\],\s*(\d+)"
match_obj = re.match(pattern, input_str)
if match_obj:
arr = list(map(int, match_obj.group(1).split(",")))
aim = int(match_obj.group(2))
sol = Solution()
result = sol.solution(arr, aim)
print(result)
else:
print("Invalid input format")
这段代码是一个动态规划问题的解答,目标是通过给定数组 arr 和目标数 aim,找出最少使用 arr 中的数字能够凑出目标数 aim 的方案数。具体来说,dp[i] 表示凑出数 i 最少需要使用的数字个数,初始化为正无穷,然后遍历 1 到 aim,对于每个数 i,遍历数组 arr 中的每个数字 j,如果 j 小于等于 i,那么尝试使用 j 来凑出 i,此时需要使用 dp[i-j] 的方案数再加上 1,即 dp[i] = min(dp[i], dp[i-j] + 1),最终返回 dp[aim],如果为正无穷,则表示无法凑出目标数,返回 -1。输入格式为一个字符串,其中以方括号包含的一段数字序列表示数组 arr,后跟一个逗号和一个数字
4、题目名称:小艺照镜子
已知字符串str。 输出字符串str中最长回文串的长度。
本人代码展示:
class Solution:
def __init__(self) -> None:
pass
def solution(self, s):
n = len(s)
max_len = 1
for i in range(n):
# 奇数
l,r = i,i
while l >= 0 and r < n and s[l] == s[r]:
if r - l + 1 > max_len:
max_len = r - l + 1
l -= 1
r += 1
# 偶数
l,r = i,i+1
while l >= 0 and r < n and s[l] == s[r]:
if r - l + 1 > max_len:
max_len = r - l + 1
l -= 1
r += 1
return max_len
if __name__ == "__main__":
s = input().strip()
sol = Solution()
result = sol.solution(s)
print(result)
这段代码是一个求解给定字符串 s 中最长回文子串的问题的解答。具体来说,该算法采用了中心扩展法,对于每个可能的回文中心位置,向两边扩展并判断是否为回文子串,记录最长的回文子串长度。其中,对于回文串长度为奇数的情况,中心位置为单个字符,对于回文串长度为偶数的情况,中心位置为两个字符之间的空隙。输出为最长回文子串的长度。
输入格式为一个字符串,表示待处理的字符串 s,输出为最长回文子串的长度。
需要注意的是,该算法只能得到最长回文子串的长度,如果需要得到具体的回文子串,还需要进行进一步的处理。
总结
这是第一次参加这种类型的竞赛,自学了2个多月的python,也不知道学的怎么样,就像试试水,就报了这次的考试,没想到居然还能够获奖,真的是受宠若惊。
这次的题目中文感觉还是比较简单的,都是语法的运用。我也是一位新人,所以给不了什么好的建议,只能多多练习了。