NLP-D57-nlp比赛D26&刷题D13&读论文&&找了一个多小时bug

46 篇文章 0 订阅
40 篇文章 0 订阅
博主分享了日常学习心得,早上阅读了多篇学术论文并添加到阅读列表。重点讨论了区间合并算法和双链表的实现,包括区间合并的排序技巧和双链表的插入、删除操作。在修复双链表代码bug的过程中遇到困难,探讨了编号与节点位置的关系,并强调了记录常用编程操作的重要性。
摘要由CSDN通过智能技术生成

——早上扫完三篇论文,下意识打开微信读书,又加了几本好书。现在总是觉得读书的时间是宝贵的、温暖的,希望能给自己的心灵留一块空地,也许是一片绿荫。现在开始刷题了!

2816双指针

在这里插入图片描述

803区间合并

n = int(input())
a = []
res = []
for _ in range(n):
    a.append(list(map(int,input().split())))
res.append(a[0])
# 区间合并算法需要先根据第一个点的值进行排序,
# 不然就是一顿操作猛如虎
a.sort()
for i in range(1,n):
    if res[-1][1]>=a[i][0]:
        res[-1][1] = max(res[-1][1],a[i][1])
    else:
        res.append(a[i])

print(len(res))

双链表

找bug真让人想吐
在这里插入图片描述
我吐了,找了半个小时,照不出来

m = int(input())
h,t = 0,1
r,l,e= [0]*100010,[0]*100010,[0]*100010
l[1]=0
r[0]=1
idx = 2


def add_to_k(x,k):
    global idx
    # 从右侧插入
    e[idx] =x
    l[idx] = k+1
    r[idx] = r[k+1]
    l[r[k+1]] = idx
    r[k+1] = idx
    idx+=1
    
def remove(k):
    r[l[k+1]] = r[k+1]
    l[r[k+1]]=l[k+1]

for _ in range(m):
    op,*pt = input().split()
    # *pt取值时用pt[0]
    if op=='L':
        add_to_k(int(pt[0]),0)
    elif op=='R':
        add_to_k(int(pt[0]),l[1])
    elif op=='D':
        remove(int(pt[0]))
    elif op=='IL':
        k,x = map(int,pt)
        add_to_k(x,l[k])
    else:
        k,x = map(int, pt)
        add_to_k(x,k)
# 先指向第一个   
h =r[h]
while h!=1:
    # print(h)
    # print(2)
    print(e[h], end=' ')
    h = r[h]

改了一点,还是错

m = int(input())
h,t = 0,1
r,l,e= [0]*100010,[0]*100010,[0]*100010
l[1]=0
r[0]=1
idx = 2


def add_to_k(x,k):
    global idx
    # 从右侧插入
    e[idx] =x
    l[idx] = k+1
    r[idx] = r[k+1]
    l[r[k+1]] = idx
    r[k+1] = idx
    idx+=1
    
def remove(k):
    r[l[k+1]] = r[k+1]
    l[r[k+1]]=l[k+1]

for _ in range(m):
    op,*pt = input().split()
    # *pt取值时用pt[0]
    if op=='L':
        add_to_k(int(pt[0]),-1)
    elif op=='R':
        add_to_k(int(pt[0]),l[1])
    elif op=='D':
        remove(int(pt[0]))
    elif op=='IL':
        k,x = map(int,pt)
        add_to_k(x,l[k])
    else:
        k,x = map(int, pt)
        add_to_k(x,k)
# 先指向第一个   
h =r[h]
print(r)
# print(l)
while h!=1:
    # print(h)
    # print(2)
    print(e[h], end=' ')
    h = r[h]

放弃了,直接用原来的思路写叭,快一个小时了。
把k+1改为k就好了。
我感觉还是用k作为编号,后期调用函数的时候再考虑第k个的编号是几比较好。因为头结点和尾结点的操作都是以编号为标准进行的,如果函数的定义为第几个插入的话,对于头尾结点不好转换。所以,k也就是函数参数还是定义为idx编号比较好。

记住:双链表函数中的k是idx编号,第k个插入,其idx编号是k+1!!!记住!!

要开始记录一些常用df操作了

df[‘’].value_counts()

统计某一列值的种类和对应个数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值