蓝桥杯:一些总结

本人也是第一次参加蓝桥杯..

从二月份开始准备着比赛到现在刚好两个月的时间,不敢说随随便便拿奖,但我知道这段学习备考的过程让我获益良多。

下面是我认为比较重要的一些模版,有需要的可以看一下。

时间有些紧..所以代码都没有附带注释

若是学过对应的算法,可以当作复习来看一下

若是没学过的话,我还是建议去找系统详细的博客学习(考前一天其实复习就好)

若有我表达不清或者有任何不理解的地方,欢迎留言评论。我会在看到的第一时间做出回答!

若有错误,欢迎指出!


# 求子集
def myset(nums) :
    res = [[]]
    for num in nums :
        res = res + [[num] + i for i in res]
    return res

# 求子串
def mystr(str1) :
    res = []
    for i in range(len(str1)) :
        for j in range(len(str1)-i) :
            res.append(str1[j:j+i+1])
    return res

# 快速幂
def qpow(base,exp) :
    res = 1
    while exp :
        if exp & 1 :
            res *= base
        base *= base
        exp >>= 1
    return res

# 最长上升子序列
numList = [1,2,3,6,4,6,3,8]
dp1 = [1 for i in range(len(numList))]
for i in range(len(numList)) :
    for j in range(i) :
        if numList[j] < numList[i] :
            dp1[i] = max(dp1[i],dp1[j]+1)

# 最长公共子串
str1 = 'abcde'
str2 = 'bbcgd'
maxlen = 0
dp2 = [[0 for i in range(len(str2)+1)] for j in range(len(str1)+1)]
for i in range(1,len(str1)+1) :
    for j in range(1,len(str2)+1) :
        if str1[i-1] == str2[j-1] :
            dp2[i][j] = dp2[i-1][j-1] + 1
        else :
            dp2[i][j] = 0
        maxlen = max(maxlen,dp2[i][j])

# 最长公共子序列        
dp3 = [[0 for i in range(len(str1)+1)]for j in range(len(str2)+1)]
for i in range(1,len(str1)+1) :
    for j in range(1,len(str2)+1) :
        if str1[i-1] == str2[j-1] :
            dp3[i][j] = dp3[i-1][j-1] + 1
        else :
            dp3[i][j] = max(dp3[i-1][j],dp3[i][j-1])
        maxlen = max(maxlen,dp3[i][j])

# 筛法求素数
numList2 = [i for i in range(2,100)]
flag = [True for i in range(100)]
for i in range(2,100) :
    if flag[i] :
        tmp = i + i
        while tmp < 100 :
            flag[tmp] = False
            tmp += i

# 旋转矩阵
matrix1 = [[1,2,3],[4,5,6],[7,8,9]]
matrix2 = [[1,2,3],[4,5,6],[7,8,9]]
# 顺时针打印矩阵 
matrix1 = matrix1[::-1]
ans1 = list(map(list,zip(*matrix1)))
# 逆时针打印矩阵
ans2 = list(map(list,zip(*matrix2)))
ans2 = ans2[::-1]

# 单调栈
# 单调递增 
def IncreasingStack(nums):
    stack = []
    res = []
    for num in nums:
        # 当前值大于栈顶元素,将栈顶元素弹出
        while stack and num >= stack[-1]:
            stack.pop()
        if stack :
            res.append(stack[-1])
        else :
            res.append(-1)
        stack.append(num)
    return res
# 单调递减
def DecreasingStack(nums):
    stack = []
    res = []
    for num in nums :
        while stack and num <= stack[-1]:
            stack.pop()
        if stack :
            res.append(stack[-1])
        else :
            res.append(-1)
        stack.append(num)
    return res

# 二分图求最大匹配

#直接上例题 :
# *    Input
# *      输入数据的第一行是三个整数K , M , N,分别表示可能的组合数目,女生的人数,男生的人数。0

———————————————————————————————————————————

海有舟可渡

山有径可行

所爱隔山海

山海皆可平

相信你对算法的热爱和敲下的每一行代码 都不会辜负你!

最后:预祝大家明天考试顺利 统统省一!!!

你可能感兴趣的:(蓝桥杯,python,算法,蓝桥杯)