• leecode#用Read4读取n个字符#相交链表


    题目描述:
    给你一个文件,并且该文件只能通过给定的 read4 方法来读取,请实现一个方法使其能够读取 n 个字符。

    分析:

    read4 方法:API read4 可以从文件中读取 4 个连续的字符,并且将它们写入缓存数组 buf 中。返回值为实际读取的字符个数。

    注意 read4() 自身拥有文件指针,很类似于 C 语言中的 FILE *fp 。

    read4 的定义:参数类型: char[] buf  返回类型: int

    注意: buf[] 是目标缓存区不是源缓存区,read4 的返回结果将会复制到 buf[] 当中。

    示例 1:

    输入: file = "abc", n = 4
    输出: 3
    解释: 当执行你的 rand 方法后,buf 需要包含 "abc"。 文件一共 3 个字符,因此返回 3。 注意 "abc" 是文件的内容,不是 buf 的内容,buf 是你需要写入结果的目标缓存区。 
    示例 2:

    输入: file = "abcde", n = 5
    输出: 5
    解释: 当执行你的 rand 方法后,buf 需要包含 "abcde"。文件共 5 个字符,因此返回 5。
    示例 3:

    输入: file = "abcdABCD1234", n = 12
    输出: 12
    解释: 当执行你的 rand 方法后,buf 需要包含 "abcdABCD1234"。文件一共 12 个字符,因此返回 12。
    示例 4:

    输入: file = "leetcode", n = 5
    输出: 5
    解释: 当执行你的 rand 方法后,buf 需要包含 "leetc"。文件中一共 5 个字符,因此返回 5。

    代码:

    1. class Solution(object):
    2. def read(self, buf, n):
    3. """
    4. :type buf: Destination buffer (List[str])
    5. :type n: Number of characters to read (int)
    6. :rtype: The number of actual characters read (int)
    7. """
    8. tmp = ["","","",""]
    9. cnt = 0
    10. read4(tmp)
    11. while tmp != ["","","",""]:
    12. for i in range(4):
    13. if tmp[i]:
    14. buf[cnt] = tmp[i]
    15. cnt += 1
    16. if cnt == n + 1:
    17. return n
    18. tmp = ["","","",""]
    19. read4(tmp)
    20. return cnt

    题目描述:

    给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

    图示两个链表在节点 c1 开始相交:

    题目数据 保证 整个链式结构中不存在环。

    注意,函数返回结果后,链表必须 保持其原始结构 。

    自定义评测:

    评测系统 的输入如下(你设计的程序 不适用 此输入):

    intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0
    listA - 第一个链表
    listB - 第二个链表
    skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数
    skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数
    评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案 。

    分析:

    法1:哈希表,用一个指针遍历第一条链表,将数据存入set中,再遍历第二条链表,判断第二条链表与set中相同的节点就是重合的节点

    法2:双指针分别遍历两条链表,遍历完再对调遍历,最终两指针会相遇,

    代码:

    1. class Solution:
    2. def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> Optional[ListNode]:
    3. A, B = headA, headB
    4. while A != B:
    5. A = A.next if A else headB
    6. B = B.next if B else headA
    7. return B

  • 相关阅读:
    PHP 严格模式
    java 八股文 基础 每天笔记随机刷
    OpenHarmony轻内核编码规范
    ClickHouse(15)ClickHouse合并树MergeTree家族表引擎之GraphiteMergeTree详细解析
    10分钟搞定manim安装与vscode配置
    数据结构篇——链表
    游戏思考26:游戏服务器压力测试文档(最近在忙这个,这个会更新频繁,12/03未完待续)
    从数据库中读取文件导出为Excel
    C++中的this指针
    前端使用jsencrypt进行RSA公钥解密
  • 原文地址:https://blog.csdn.net/weixin_44267765/article/details/128113774