leedcode刷题(1)

这篇具有很好参考价值的文章主要介绍了leedcode刷题(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

各位朋友们,大家好,从今天开始我将陆续为大家更新我自己每天的leedcode刷题,我将会为大家说明每一步的来由,保证你一天新学会几道题目。各位朋友可以跟着博主每天刷几道题,相信两个月后大家的代码能力可以得到明显的提高。那么接下来就开始今天的刷题之路了哦。

两数相加

leetcode两数相加(难度:中等)

题目要求

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

用例输入

示例 1:
leedcode刷题(1)

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

做题思路

因为题目给的链表就是倒序的,而我们平时做加法时也是从两个数字的个位开始加的,如果相加结果大于进位,就向前一位进一,并且当前位减去进位。
我们还需要注意的是,这道题没有说两个链表的长度相同,所以当到达了其中一个链表的尾结点时,就把当前链表的上一位当作0。并且当两个链表都到达了尾结点时,我们还需要做出判断,判断是否还有进位值,如果有我们就需要额外创建一个结点来放这个进位值。

代码实现

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
//创建一个哨兵位,不动的头结点
    struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
    //cur1来连接返回的链表上的每一个结点
    struct ListNode* cur1 = head;
//创建临时变量来存放进位值
    int tmp = 0;
    //当l1和l2都为NULL时,结束循环
    while (l1 || l2)
    {
//这里是判断l1或l2是否到达了尾结点,如果到了,那么该链表结点的值为0
        int n1 = l1 ? l1->val : 0;
        int n2 = l2 ? l2->val : 0;
        int sum = n1 + n2 + tmp;
        struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
        newNode->val = sum % 10;
        cur1->next = newNode;
        cur1 = cur1->next;
        tmp = sum / 10;
        if (l1)
        {
            l1 = l1->next;
        }
        if (l2)
        {
            l2 = l2->next;
        }
    }
//判断当l1和l2都到达了尾结点时,是否还有进位值
    if (tmp > 0)
    {
        struct ListNode* newNode1 = (struct ListNode*)malloc(sizeof(struct ListNode));
        newNode1->val = 1;
        cur1->next = newNode1;
    }

    return head->next;
}

我们写完了代码之后我们来运行一下,看看是否能通过。
leedcode刷题(1)
当我们提交的时候会出现这个执行错误,那么这是为什么呢?这并不代表我们的代码有问题,而是因为leedcode的标准比较严格,我们在创建一个新结点的时候必须将该结点的next指针赋值。所以我们需要在创建结点的时候将next指针置为NULL。

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->next = NULL;
    struct ListNode* cur1 = head;
    int tmp = 0;
    while (l1 || l2)
    {
        int n1 = l1 ? l1->val : 0;
        int n2 = l2 ? l2->val : 0;
        int sum = n1 + n2 + tmp;
        struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
        newNode->next = NULL;
        newNode->val = sum % 10;
        cur1->next = newNode;
        cur1 = cur1->next;
        tmp = sum / 10;
        if (l1)
        {
            l1 = l1->next;
        }
        if (l2)
        {
            l2 = l2->next;
        }
    }
    if (tmp > 0)
    {
        struct ListNode* newNode1 = (struct ListNode*)malloc(sizeof(struct ListNode));
        newNode1->next = NULL;
        newNode1->val = 1;
        cur1->next = newNode1;
    }

    return head->next;
}

leedcode刷题(1)

无重复字符的最长字串

leetcode之无重复字符的最长字串(难度:中等)

题目要求

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

用例输入

示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

做题思路

我们这个题使用双指针来解决,一个指针用来记住新的字符串的第一个元素的地址,另一个指针用来遍历字符串。当遍历字符串的指针指向的内容没有重复时,那么我们怎样知道当前的字符是否有重复呢?我们创建一个大小为128的数组,将字符所代表的ASCII码值作为数组下标。如果没有重复我们的计数器就加1,如果有重复就返回到那个记忆指针所在的位置。然后遍历的字符串再继续走,知道到达字符串的’\0’位置。

代码实现

int lengthOfLongestSubstring(char* s) {
//s1是记忆指针
    char* s1 = s;
//s2指针用来遍历字符串
    char* s2 = s;
    char arr[128] = { 0 };
//初始化数组,将数组的元素都初始化为0
    memset(arr, 0, 128);
    int count = 0;
//max用来存储最长的无重复字符的长度
    int max = 0;
    while (*s2 != '\0')
    {
        if (arr[*s2] == 0)
        {
    //我们向数组中对应下标第一次存放数据时,存放完成就将该下标的数据改为1
            arr[*s2] = 1;
            count++;
        }
        else
        {
    //如果有重复元素,就重新把数组中元素的数据初始化
            memset(arr, 0, 128);
            if (count > max)
            {
                max = count;
            }
            count = 0;
            s2 = s1;
            s1++;
        }
        s2++;
    }
//这里做判断是防止字符串中没有重复的字符,然后max就没有被赋值
    if(count>max)
    {
        max = count;
    }
    return max;
}

leedcode刷题(1)

小结

那么这些就是我今天的分享了,希望对大家能有帮助。如果大家有更优的解法,欢迎大家在评论区留言。如果觉得博主写的不错,记得点个关注和赞,跟着博主每天几道代码题。文章来源地址https://www.toymoban.com/news/detail-409262.html

到了这里,关于leedcode刷题(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leedcode刷题笔记day1

    题目大意: 暴力解法 两个for循环(也是我一看到题目想到的方法) 枚举在数组中所有的不同的两个下标的组合逐个检查它们所对应的数的和是否等于 target 复杂度分析 时间复杂度:O(n2),这里 n 为数组的长度 空间复杂度:O(1),只用到常数个临时变量 使用哈希表 为了省去一层

    2024年01月20日
    浏览(36)
  • 今天给大家带来Python炫酷爱心代码

    前言: 这个是小编之前朋友一直要小编去做的,不过之前技术不够所以一直拖欠今天也完成之前的约定吧! 至于他是谁,我就不多说了直接上代码 如果有需要的话,可以联系小编噢!

    2024年02月05日
    浏览(50)
  • 今天给大家介绍一下华为智选手机与华为手机的区别

    华为智选手机是由华为品牌方与其他公司合作推出的手机产品,虽然其机身上没有“华为”标识,但是其品质和技术水平都是由华为来保证的。这些手机在制造、设计和使用方面都采用了华为的相关技术和标准,因此可以享受到和华为旗舰手机相同的优质使用体验。    目前

    2024年02月09日
    浏览(51)
  • 今天跟大家好好介绍一下接口工具(jmeter、postman、swagger等)

    一、接口都有哪些类型? 接口一般分为两种:1.程序内部的接口 2.系统对外的接口 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把 数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的

    2024年02月05日
    浏览(54)
  • 今天跟大家推荐几款实用的ai写作生成器

    自ai技术的发展以来,人工智能在各个领域都展现出了无限可能。在学术界,写作论文是科研人员不可避免的重要任务,然而,论文写作需要大量的时间和经验技能,而这对刚刚步入学术领域的年轻科研人员来说尤为困难。在这样的背景下,提高写作效率、降低人力成本、缩

    2024年02月13日
    浏览(45)
  • 今天跟大家分享好用的智能ai绘画免费软件有哪些

    在教学的时候配合进行ai绘画操作来讲解日常的知识,可以帮助学生更好的理解,比如在讲解化学反应的时候,我们可以通过文字描述反应的化学式和反应过程,但是这可能会让学生感到无趣和枯燥,知识没办法真正的进入大脑。而如果借助ai绘画的软件,我们可以将反应的过

    2024年02月12日
    浏览(50)
  • 今天教大家微信小程序怎么免300元认证费终身使用的教程

    众所周知微信小程序认证需要300元认证费,当然用已认证的微信公众号可以免费认证但是认证微信公众号也需要300认证费而且需要每年进行年检等于每年都要花300元。 不知道大家注册小程序的时候有没有发现审核很慢申请完需要等几天很费时间, 而且微信限制一个身份证只

    2024年02月08日
    浏览(58)
  • 今天给大家介绍一篇基于springboot的医院管理系统的设计与实现

    临近学期结束,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问题,今天给大家介绍一篇基于springboot的医院管理系统的设计与实现。 随着科

    2023年04月14日
    浏览(79)
  • 怎么在树莓派环境上搭建web网站,并发布到外网可访问,今天教给大家

    这非常适合设置您的第一个网站,不仅可以学习管理 wordpress 站点,还可以学习 Linux。您将需要一个树莓派(Raspberry Pi)、几个小时和一台计算机来下载映像。 树莓派(RPI) 是学习这些东西的完美设备。 下载适用于您的操作系统的树莓派镜像工具。它支持大多数操作系统(Window

    2024年02月14日
    浏览(44)
  • 算法模版,今天开始背

    二分查找算法 滑动窗口算法 上下是对称的 二叉树的层序遍历 动态规划算法 Nsum问题

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包