从0开始学算法——第二十一天(链表练习)

写在开头的话

学习了今天的知识,让我们来做一道题目练练手吧。(题目是别的地方扒来的,参考答案是我自己写的,肯定不是最优解,有更好的方法欢迎评论区交流)

第一题------左移右移

参考答案

第一题参考答案(Python版)

python 复制代码
import sys

def solve():
    input = sys.stdin.read
    data = input().split()
    
    idx = 0
    N = int(data[idx]); idx += 1
    M = int(data[idx]); idx += 1
    
    # 使用双向链表,用数组模拟
    # left[i] 表示数字i左边的数字
    # right[i] 表示数字i右边的数字
    # 使用0作为左哨兵,N+1作为右哨兵
    left = [0] * (N + 2)
    right = [0] * (N + 2)
    
    # 初始化:1, 2, 3, ..., N
    for i in range(1, N + 1):
        left[i] = i - 1
        right[i] = i + 1
    
    # 设置哨兵
    left[0] = 0
    right[0] = 1
    left[N + 1] = N
    right[N + 1] = N + 1
    
    for _ in range(M):
        op = data[idx]; idx += 1
        x = int(data[idx]); idx += 1
        
        # 如果x已经在正确的位置,跳过(可选优化)
        if (op == 'L' and left[x] == 0) or (op == 'R' and right[x] == N + 1):
            continue
        
        # 将x从链表中移除
        l = left[x]
        r = right[x]
        right[l] = r
        left[r] = l
        
        if op == 'L':
            # 移动到最左边
            # 当前第一个元素是right[0]
            first = right[0]
            # 将x插入到0和first之间
            right[0] = x
            left[x] = 0
            right[x] = first
            left[first] = x
        else:  # 'R'
            # 移动到最右边
            # 当前最后一个元素是left[N+1]
            last = left[N + 1]
            # 将x插入到last和N+1之间
            left[N + 1] = x
            right[x] = N + 1
            left[x] = last
            right[last] = x
    
    # 输出结果
    result = []
    curr = right[0]
    while curr != N + 1:
        result.append(curr)
        curr = right[curr]
    
    print(' '.join(map(str, result)))

if __name__ == "__main__":
    solve()
相关推荐
独断万古他化9 分钟前
【算法通关】前缀和:从一维到二维、从和到积,核心思路与解题模板
算法·前缀和
xian_wwq11 分钟前
【学习笔记】对网络安全“三化六防挂图作战”的理解与思考
笔记·学习·三化六防
loui robot12 分钟前
规划与控制之局部路径规划算法local_planner
人工智能·算法·自动驾驶
格林威18 分钟前
Baumer相机金属焊缝缺陷识别:提升焊接质量检测可靠性的 7 个关键技术,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·堡盟相机
三伏52224 分钟前
Cortex-M3权威指南Cn第十章——笔记
笔记·单片机·嵌入式硬件·cortex-m3
AI视觉网奇38 分钟前
metahuman 购买安装记录
笔记·学习·ue5
koo36440 分钟前
pytorch深度学习笔记19
pytorch·笔记·深度学习
你撅嘴真丑43 分钟前
第八章 - 贪心法
开发语言·c++·算法
VT.馒头1 小时前
【力扣】2625. 扁平化嵌套数组
前端·javascript·算法·leetcode·职场和发展·typescript
wanghu20241 小时前
AT_abc443_C~E题题解
c语言·算法