2024蓝桥杯每日一题(双指针)

一、第一题:牛的学术圈

解题思路:双指针+贪心

仔细思考可以知道,写一篇综述最多在原来的H指数的基础上+1,所以基本方法可以是先求出原始的H指数,然后分类讨论怎么样提升H指数。

【Python程序代码】

python 复制代码
n,l = map(int,input().split())
a = list(map(int,input().split()))
a.sort()
res,suml,sumr = 0,0,0
for i in range(n):
    sumr = n-i
    if a[i]>sumr:
        if i==0:break
        if a[i-1]+1>=sumr+1 and l>=1:
            sumr+=1
            break
        break
    if a[i]==sumr:
        j,c = i,1
        if i == 0: break
        while j+1<n and a[j+1]==a[i]:
            j += 1
            c += 1
        if a[i-1]==a[i] and l>=c+1:
            sumr+=1
            break
if l==0 and a[n-1]==0:print(0)
else:print(sumr)

二、第二题:最长连续不重复子序列

思路:双指针

双指针模板题

【Python程序代码】

python 复制代码
n = int(input())
a = [0] + list(map(int,input().split()))
mp = [0]*(100010)
res,j=1,1
for i in range(1,n+1):
    if mp[a[i]]:
        res = max(res,i-j)
        while a[j]!=a[i]:
            mp[a[j]]-=1
            j +=1
        j += 1
    else:
        mp[a[i]]+=1
res = max(res,i-j+1)
print(res)

三、第三题: 数组元素的目标和

解题思路:双指针

双指针模板题

【Python程序代码】

python 复制代码
n,m,x = map(int,input().split())
a = list(map(int,input().split()))
b = list(map(int,input().split()))
j = m-1
res = []
for i in range(n):
    if a[i]+b[j]<x:continue
    if a[i]+b[j]==x:
        res.append((i,j))
        continue
    if a[i]+b[j]>x:
        while j>0 and a[i]+b[j]>=x:
            if a[i]+b[j]==x:
                res.append((i,j))
            j -= 1
for i in res:
    print(i[0],i[1])

四、第四题: 判断子序列

解题思路:双指针

双指针模板题

【Python程序代码】

python 复制代码
n,m = map(int,input().split())
a = list(map(int,input().split()))
b = list(map(int,input().split()))
j = 0
for i in range(m):
    if j==n:break
    if b[i]==a[j]:
        j += 1
if j==n:print("Yes")
else:print("No")

五、第五题: 日志统计

解题思路:双指针+滑动窗口

双指针+滑动窗口模板题

【Python程序代码】

python 复制代码
from collections import defaultdict
n,d,k = map(int,input().split())
mp = defaultdict(int)
a,res = [],[]
for i in range(n):
    ts,id = map(int,input().split())
    a.append([ts,id])
a.sort()
j,pret = 0,0
for i in range(n):
    teps,tepd = a[i]
    if teps - a[j][0]>=d:
        while teps - a[j][0]>=d:
            mp[a[j][1]]-=1
            j += 1
        pret = a[j][0]
    mp[tepd] += 1
    if mp[tepd]>=k:
         res.append(tepd)
res = list(set(res))
res.sort()
for i in res:print(i)
相关推荐
FairyGirlhub22 分钟前
神经网络的初始化:权重与偏置的数学策略
人工智能·深度学习·神经网络
元亓亓亓23 分钟前
LeetCode热题100--230. 二叉搜索树中第 K 小的元素--中等
算法·leetcode·职场和发展
草莓熊Lotso24 分钟前
《算法闯关指南:优选算法-双指针》--01移动零,02复写零
c语言·c++·经验分享·算法·leetcode
焜昱错眩..1 小时前
代码随想录算法训练营第三十九天|62.不同路径 63.不同路径ll
算法
大写-凌祁4 小时前
零基础入门深度学习:从理论到实战,GitHub+开源资源全指南(2025最新版)
人工智能·深度学习·开源·github
焦耳加热5 小时前
阿德莱德大学Nat. Commun.:盐模板策略实现废弃塑料到单原子催化剂的高值转化,推动环境与能源催化应用
人工智能·算法·机器学习·能源·材料工程
CodeCraft Studio5 小时前
PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 Base64
开发语言·python·pdf·base64·aspose·aspose.pdf
深空数字孪生5 小时前
储能调峰新实践:智慧能源平台如何保障风电消纳与电网稳定?
大数据·人工智能·物联网
wan5555cn5 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
u6065 小时前
常用排序算法核心知识点梳理
算法·排序