Leetcode刷题笔记11

news2025/2/25 13:41:19

415. 字符串相加

415. 字符串相加 - 力扣(LeetCode)

 解法一:头插

头插是指将一个新元素插入到链表的头部(即第一个位置)。

比如对于456和77,先计算两个数字的末项6+7的结果,然后往前挪动一位

头插的效率较低,每次在字符串的开头插入一个字符,所有后续的字符都需要向后移动一个位置,因此插入一个字符的时间复杂度为O(n),其中n是当前字符串的长度。如果有m个字符需要插入,整体时间复杂度为O(m * n)。在最坏情况下,当字符串长度为n,插入操作需要进行n次,总的时间复杂度为O(n^2)。

解法二:尾插

尾插是指将一个新元素插入到链表的尾部(即最后一个位置)。

尾插相较于头插来说,效率更高

在字符串的末尾追加一个字符的操作通常是O(1)时间复杂度,因为大多数情况下,这只需要将新字符添加到字符串的末尾。如果底层实现需要重新分配内存,这个操作可能会变慢,但这种情况的发生频率很低,均摊时间复杂度仍然为O(1)。如果有n个字符需要插入,总体时间复杂度为O(n)。

代码:C++

class Solution {
public:
    string addStrings(string num1, string num2) {
        int end1 = num1.size() - 1, end2 = num2.size() - 1;
        int next = 0; // 进位
        string strRet;
        while (end1 >= 0 || end2 >= 0) // 两个都结束了才结束,只要有一个大于等于0就继续
        {
            //int val1 = num1[end1]; // 直接取有可能会越界,比如end2还没结束,end1结束了,这时候访问就会越界
            int val1 = end1 >= 0 ? num1[end1] - '0' : 0; // 如果大于等于0,就给值,否则给0
            int val2 = end2 >= 0 ? num2[end2] - '0' : 0; // ASCII码值

            int ret = val1 + val2 + next;
            next = ret > 9 ? 1 : 0; // 大于9就进位1,不然进位0

            // 头插 -- 头插的效率很低
            // strRet.insert(0, 1, (ret%10) + '0'); // 0这个位置插入1个字符,比如字符0加3就变成字符3了
            // strRet.insert(strRet.begin(), (ret%10) + '0'); // 也可以给第一个位置的迭代器

            // 尾插效率高
            strRet += ('0' + ret % 10);

            --end1;
            --end2;
        }

        if (next == 1)
            strRet += '1';

        // 头插
        // if(next) // 比如9+1,如果还有一个1
        // {
        //     strRet.insert(strRet.begin(), '1');
        // }

        // 逆置
        reverse(strRet.begin(), strRet.end()); // 逆置区间必须是左闭右开[)


        return strRet;
    }
};

21.合并两个有序链表

21. 合并两个有序链表 - 力扣(LeetCode)

解法:递归

 先判断l1和l2的边界条件,然后直接使用递归。

比较list1list2当前节点的值:

  • 如果list1当前节点的值小于list2当前节点的值,将list1的下一个节点指向合并list1的下一个节点和list2的结果,返回list1
  • 否则,将list2的下一个节点指向合并list1list2的下一个节点的结果,返回list2

代码:C++

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        // 1空返回2
        if(list1 == nullptr)
        {
            return list2;
        }
        // 2空返回1
        else if(list2 == nullptr)
        {
            return list1;
        }
        else if(list1->val < list2->val)
        {
            list1->next = mergeTwoLists(list1->next, list2);
            return list1;
        }
        else
        {
            list2->next = mergeTwoLists(list1, list2->next);
            return list2;
        }

    }
};

917. 仅仅反转字母

917. 仅仅反转字母 - 力扣(LeetCode)

解法:双指针

begin指向开头,end指向最后一个元素

begin遇到非字母字符就++,end遇到就--

当begin和end都指向字母时,交换它们指向的字符,然后分别移动begin向右,end向左。

代码:C++

class Solution {
public:
    bool IsLetter(char ch)
    {
        if((ch >= 'a' && ch <= 'z')
        || (ch >= 'A' && ch <= 'Z'))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    string reverseOnlyLetters(string s) {
        size_t begin = 0, end = s.size()-1;
        while(begin < end)
        {
            while(begin < end && !isalpha(s[begin])) // 也可以直接用c++里面的函数isalpha
            {
                // 不是字母就++
                ++begin;
            }
            while(begin < end && !isalpha(s[end]))
            {
                --end;
            }
            swap(s[begin], s[end]);
            ++begin;
            --end;
        }
        return s;
    }
};

387.字符串中的第一个唯一字符

387. 字符串中的第一个唯一字符 - 力扣(LeetCode)

解法:哈希表

可以直接使用一个数据模拟哈希表。

统计每个字母出现的次数,如果等于1就找到了。

因为是在循环中,所以是从前往后,找到就直接是第一个唯一字符。

代码:C++

class Solution {
public:
    int firstUniqChar(string s) {
        // 首先,创建一个数组存储
        int count[256] = {0}; 
        int n = s.size();
        // 统计每个字符出现的次数
        for(int i=0; i<n; ++i)
        {
            count[s[i]] += 1;
        }
        // 按照字符次序从前往后找只出现一次的字符
        for(int i=0; i<n; ++i)
        {
            if(count[s[i]] == 1)
            {
                return i;
            }
           
        }
    return -1;
    }
};

哈希表实现:

class Solution {
public:
    int firstUniqChar(string s) {
        unordered_map<int, int> frequency;
        for (char ch : s) {
            ++frequency[ch];
        }
        for (int i = 0; i < s.size(); ++i) {
            if (frequency[s[i]] == 1) {
                return i;
            }
        }
        return -1;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1823977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android开发AndroidStudio安装教程

本文图示展示AndroidStudio安装教程。 目录 一、下载安装包 二、安装 一、下载安装包 https://developer.android.google.cn/studio?hlzh-cn 二、安装 双击exe Next Next Next 默认点击Install Next 点击finish进入设置文件界面。 如果本地有设置文件&#xff0c;选择C…

Vulnhub-DC-9

靶机IP:192.168.20.144 kaliIP:192.168.20.128 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) 信息收集 nmap扫描一下端口及版本号 dirsearch扫目录 最后去前端界面观察发现也没什么隐藏路径。 观察功能&#xff0c;search引起注意&#xff0c;SQL注入测试 当输…

tsp可视化python

随机生成点的坐标并依据点集生成距离矩阵&#xff0c;通过点的坐标实现可视化 c代码看我的这篇文章tsp动态规划递归解法c from typing import List, Tuple import matplotlib.pyplot as plt from random import randintN: int 4 MAX: int 0x7f7f7f7fdistances: List[List[in…

模板方法模式(大话设计模式)C/C++版本

模板方法模式 C #include <iostream> using namespace std;class TestPaper { public:void TestQ1(){cout << "杨过得到&#xff0c;后来给了郭靖&#xff0c;炼成倚天剑&#xff0c;屠龙刀的玄铁可能是[ ]\na.球磨铸铁 b.马口贴 c.高速合金钢 d.碳素纤维&q…

仿FC数学金刚游戏介绍

简介 Math Monkey是Simple2l工作室开发的第二款小游戏&#xff0c;灵感来源于FC游戏平台的数学金刚游戏。小学时玩FC游戏是业余时间最期待的事情&#xff0c;还记得有一次和玩伴玩游戏时已经晚上了&#xff0c;于是约定再玩一把就各回各家&#xff0c;没想到又连玩了N把每一把…

Pytorch 卷积神经网络-手写数字识别

卷积神经网络是深度学习中的一个里程碑式的技术&#xff0c;有了这个技术&#xff0c;才会让计算机有能力理解图片和视频信息&#xff0c;才会有计算机视觉的众多应用。 本文讨论卷积神经网络模型&#xff08;CNN&#xff09;的Hello World。前面讨论的是一个二分类问题&#x…

LeetCode | 387.字符串中的第一个唯一字符

这道题可以用字典解决&#xff0c;只需要2次遍历字符串&#xff0c;第一次遍历字符串&#xff0c;记录每个字符出现的次数&#xff0c;第二次返回第一个出现次数为1的字符的下标&#xff0c;若找不到则返回-1 class Solution(object):def firstUniqChar(self, s):""…

MFC基础学习应用

MFC基础学习应用 1.基于对话框的使用 左上角为菜单键&#xff08;其下的关于MFC主要功能由IDD_ABOUTBOX决定) 附图 右下角为按钮&#xff08;基本功能由IDD_DIALOG决定,添加按钮使用由左上角的工具箱完成) 附图 2.自行添加功能与按钮//功能代码 void CMFCApplication4Dlg:…

使用thymeleaf直接渲染字符串

目录 一、依赖 二、示例代码 一、依赖 <--JAVA 8--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><version>2.7.18</version></dependency><-…

怎么图片转excel表格?推荐三个方法

怎么图片转excel表格&#xff1f;在信息化高速发展的今天&#xff0c;图片转Excel表格的需求日益凸显&#xff0c;尤其是在职场办公中&#xff0c;这一需求更是显得尤为迫切。为了满足广大用户的需求&#xff0c;市面上涌现出了众多图片转Excel的软件。今天&#xff0c;就为大家…

[面试题]Java【并发】

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL 因为 Java 并发涉及到的内容会非常多&#xff0c;本面试题可能很难覆盖到所有的知识点&#xff0c;所以推荐 《Java并发编程的艺术》 。 Java 线程 线程 通知 等待 线…

Vue38-组件的几个注意点

一、组件回顾 1-1、创建组件 1-2、注册组件 1-3、使用组件 二、注意点&#xff1a;组件名 2-1、组件名一个单词&#xff1a;纯小写&#xff0c;或者&#xff0c;首字母大写 2-2、多个单词&#xff1a; 1、xx-bbbb 2、AaaBbbb&#xff1a;每个单词的首字母都大写 前提&…

js轮播图有,移入移出事件,左右滑动事件功能

效果图&#xff1a; 具体代码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <meta name"viewport" content"widthdevice-width, initial-scale1"> <title></title> </he…

HTML静态网页成品作业(HTML+CSS)—— 明星吴磊介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…

【Tkinter界面】Canvas 图形绘制(02/5)

文章目录 一、说明二、几何时使用 Canvas 组件2.1 用法2.2 简单范例2.3 对象移动2.4 对象删除2.5 文字对象显示 三、画布和画布对象3.1 画布生成函数原型3.2 使用create_xxx()方法3.3 对参数**options的解释 一、说明 Canvas&#xff08;画布&#xff09;组件为 Tkinter 的图形…

shell脚本简单命令

shell脚本 脚本就是可运行代码的集合&#xff0c;脚本语言&#xff08;计算机语言&#xff09;脚本的特点&#xff1a;从上到下&#xff0c;按行执行。 python 脚本语言 格式更严谨 严格的执行锁进。也是从上到下按行执行。 shell脚本就是在shell环境&#xff08;/bin/bash&…

终于把AUC的计算方式搞懂了!

1. 横纵坐标 纵坐标&#xff1a;sensitivity或者TPR 横坐标&#xff1a;FPR 或者 1-Specificity 2. 计算方法 2.1 方法1 def get_roc_auc(y_true, y_score):"""正样本得分大于负样本得分的概率&#xff0c;需要遍历每个正样本和每个负样本1. 选取所有正样本与…

AGI 远不止 ChatGPT!一文入门 AGI 通识及应用开发

AI 大语言模型进入爆发阶段 2022 年 12 月 ChatGPT 突然爆火&#xff0c;原因是其表现出来的智能化已经远远突破了我们的常规认知。虽然其呈现在使用者面前仅仅只是一个简单的对话问答形式&#xff0c;但是它的内容化水平非常强大&#xff0c;甚至在某些方面已经超过人类了&am…

模型 POA行动

说明&#xff1a;系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。让目标凝聚伙伴&#xff0c;伙伴共创方法&#xff0c;加速实现愿景&#xff0c;可谓是行动力的“飞轮效应”。 1 POA行动模型的应用 1.1 POA模型在非营利组织&#xff08;NGO&#x…

如何确保数据跨域交换安全、合规、可追溯性?

数据跨域交换是指在不同的组织、系统或网络之间进行数据的传输和共享。随着数字经济的发展&#xff0c;数据跨域交换在促进数据流通和创新融合方面发挥着重要作用。然而&#xff0c;这一过程也面临着诸多挑战和风险&#xff0c;例如数据安全、合规性、完整性以及责任不清晰等问…