算法学习——LeetCode力扣补充篇3(143. 重排链表、141. 环形链表、205. 同构字符串、1002. 查找共用字符、925. 长按键入)

news2024/11/26 15:46:40

算法学习——LeetCode力扣补充篇3

在这里插入图片描述

143. 重排链表

143. 重排链表 - 力扣(LeetCode)

描述

给定一个单链表 L 的头节点 head ,单链表 L 表示为:

L0 → L1 → … → Ln - 1 → Ln
请将其重新排列后变为:

L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例

示例 1:

在这里插入图片描述

输入:head = [1,2,3,4]
输出:[1,4,2,3]

示例 2:

在这里插入图片描述

输入:head = [1,2,3,4,5]
输出:[1,5,2,4,3]

提示

链表的长度范围为 [1, 5 * 104]
1 <= node.val <= 1000

代码解析

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    void reorderList(ListNode* head) {
        ListNode *tmp = head;
        vector<int> arr_num;
        while(tmp!=nullptr)
        {
            arr_num.push_back(tmp->val);
            tmp = tmp -> next;
        }

        int node_num = arr_num.size()/2;

        tmp = head;
        ListNode *tmp_next;
        while(node_num--)
        {
            ListNode *new_node = new ListNode(arr_num[arr_num.size()  - ( arr_num.size()/2 - node_num)]);
            // cout<<new_node->val<<endl;
            tmp_next = tmp->next;
            tmp->next = new_node;
            new_node->next = tmp_next;
            if(node_num == 0 && arr_num.size()%2 == 0) new_node->next = nullptr;
            else if(node_num == 0 && arr_num.size()%2 == 1) new_node->next->next = nullptr;
            else tmp = tmp->next->next;
        }
        

    }
};

141. 环形链表

141. 环形链表 - 力扣(LeetCode)

描述

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

示例

示例 1:

在这里插入图片描述

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

在这里插入图片描述

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

在这里插入图片描述

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

提示

链表中节点的数目范围是 [0, 104]
-105 <= Node.val <= 105
pos 为 -1 或者链表中的一个 有效索引 。

代码解析

```cpp
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {
        if(head==nullptr || head->next==nullptr) return false;
        ListNode *left = head;
        ListNode *right = head;

        while(left!=nullptr && right !=nullptr && right->next!= nullptr)
        {
            left = left->next;
            right = right->next->next;
            if(left == right) return true;
        }
        return false;
    }
};

205. 同构字符串

205. 同构字符串 - 力扣(LeetCode)

描述

给定两个字符串 s 和 t ,判断它们是否是同构的。

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

示例

示例 1:

输入:s = “egg”, t = “add”
输出:true

示例 2:

输入:s = “foo”, t = “bar”
输出:false

示例 3:

输入:s = “paper”, t = “title”
输出:true

提示

1 <= s.length <= 5 * 104
t.length == s.length
s 和 t 由任意有效的 ASCII 字符组成

代码解析

class Solution {
public:
    bool isIsomorphic(string s, string t) {
        if(s.size() != t.size()) return false;
        unordered_map<char,char> my_map_s;
        unordered_map<char,char> my_map_t;

        for(int i=0 ; i<s.size() ;i++)
        {
            if(my_map_s.find(s[i]) == my_map_s.end())
                my_map_s[s[i]] = t[i];
        
            if(my_map_t.find(t[i]) == my_map_t.end())
                my_map_t[t[i]] = s[i];
             
            if(my_map_s[s[i]] != t[i] || my_map_t[t[i]] != s[i]) return false; 
        }
        return true;
    }
};

1002. 查找共用字符

1002. 查找共用字符 - 力扣(LeetCode)

描述

给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。

示例

示例 1:

输入:words = [“bella”,“label”,“roller”]
输出:[“e”,“l”,“l”]

示例 2:

输入:words = [“cool”,“lock”,“cook”]
输出:[“c”,“o”]

提示

1 <= words.length <= 100
1 <= words[i].length <= 100
words[i] 由小写英文字母组成

代码解析

class Solution {
public:
    vector<string> commonChars(vector<string>& words) {
        vector<string> result;
        vector<vector<int>> map(words.size() , vector<int>(26,0));
    
        for(int i=0 ; i<words.size() ;i++)
        {
            for(int j=0 ; j<words[i].size() ;j++)
                map[i][words[i][j] - 'a'] += 1;
        }

        for(int j=0 ; j<26 ;j++)
        {
            int tmp = INT_MAX;
            for(int i=0 ; i<words.size() ;i++)
            {
                if(map[i][j] == 0 ) break;
                tmp = min( tmp, map[i][j]);
                if(i==words.size()-1)
                {
                    while(tmp--)
                    {
                        string s(1,'a'+j);
                        result.push_back(s);
                    }
                } 
            }
        }
        return result;
    }
};

925. 长按键入

925. 长按键入 - 力扣(LeetCode)

描述

你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。

你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。

示例

示例 1:

输入:name = “alex”, typed = “aaleex”
输出:true
解释:‘alex’ 中的 ‘a’ 和 ‘e’ 被长按。

示例 2:

输入:name = “saeed”, typed = “ssaaedd”
输出:false
解释:‘e’ 一定需要被键入两次,但在 typed 的输出中不是这样。

提示

1 <= name.length, typed.length <= 1000
name 和 typed 的字符都是小写字母

代码解析

class Solution {
public:
    bool isLongPressedName(string name, string typed) {
        int indnx = 0;
        if(name[0] != typed[0]) return false;
        
        for(int i=0 ; i<typed.size() ;i++)
        {
            if(typed[i] == name[indnx]) indnx++;
            else if(typed[i] != name[indnx] && typed[i] != name[indnx-1]) return false;
        }
        if(indnx == name.size()) return true;
        else return false;
    }
};

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

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

相关文章

题目:小蓝的神秘行囊(蓝桥OJ 3937)

问题描述&#xff1a; 解题思路&#xff1a; 二维优化01背包模板题。与一维优化01背包不同在于多增加一维。 代码&#xff1a; #include <bits/stdc.h> using namespace std;const int N 1e2 9; int dp[N][N]; //二维的01背包&#xff0c;dp[i][j]&#xff1a;i是体…

【SpringCloud】一文详谈Nacos

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …

metasploit使用及内网笔记

1 基本操作 Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework&#xff0c;简称叫做MSF。Metasploit作为全球最受欢迎的工具&#xff0c;不仅仅是因为它的方便性和强大性&#xff0c;更重要的是它的框架。它允许使用者开发自己的漏洞脚本&#xff0c;从而进行…

Dockerfile和Docker-compose

一、概述 Dockerfile和Docker Compose是用于构建和管理 Docker 容器的两个工具&#xff0c;但它们的作用和使用方式不同。 Dockerfile Dockerfile 是一个文本文件&#xff0c;用于定义 Docker 镜像的构建规则。它包含一系列指令&#xff0c;如 FROM&#xff08;指定基础镜像…

RAG:检索增强生成系统如何工作

随着大型语言模型&#xff08;LLM&#xff09;的发展&#xff0c;人工智能世界取得了巨大的飞跃。经过大量数据的训练&#xff0c;LLM可以发现语言模式和关系&#xff0c;使人工智能工具能够生成更准确、与上下文相关的响应。 但LLM也给人工智能工程师带来了新的挑战&#xff…

System.gc 之后到底发生了什么 ?

本文基于 OpenJDK17 进行讨论 在 JDK NIO 针对堆外内存的分配场景中&#xff0c;我们经常会看到 System.gc 的身影&#xff0c;比如当我们通过 FileChannel#map 对文件进行内存映射的时候&#xff0c;如果 JVM 进程虚拟内存空间中的虚拟内存不足&#xff0c;JVM 在 native 层就…

将整数的二进制位的奇偶数位交换

✅博客主页:爆打维c-CSDN博客​​​​​​ &#x1f43e; &#x1f539;分享c语言知识及代码 以下是一个用于交换整数二进制位的宏&#xff1a; #define SWAP_BITS(num) (((num) & 0xAAAAAAAA) >> 1) | (((num) & 0x55555555) << 1)这个宏利用了二进制掩…

WordPress AutomaticPlugin SSRF漏洞复现(CVE-2024-27954)

0x01 产品简介 WordPress是一款免费开源的内容管理系统(CMS),最初是一个博客平台,但后来发展成为一个功能强大的网站建设工具,适用于各种类型的网站,包括个人博客、企业网站、电子商务网站等,并逐步演化成一款内容管理系统软件。 0x02 漏洞概述 WordPress AutomaticPlu…

让工作自动化起来!无所不能的Python

让工作自动化起来&#xff01;无所不能的Python 一、Python是办公自动化的重要工具二、Python是提升职场竞争力的利器三、Python是企业数字化的重要平台四、Python是AI发展的重要通道之一内容简介作者简介前言读者对象如何阅读本书购买链接参与方式 随着我国企业数字化和信息化…

Shell与Bash与POSIX与Linux间的关系

shell是什么&#xff1f; Shell的英语翻译是“壳”&#xff0c;其作用也跟名字差不多&#xff0c;为操作系统套个壳&#xff0c;人与操作系统的壳交互。与壳相对应的则是操作系统内核&#xff0c;一个“壳”一个“核”。核从1970年代开始就基本定型了&#xff0c;没什么大的改…

QA测试开发工程师面试题满分问答4: 如何测试购物车功能?

当测试一个购物车时&#xff0c;我们需要采用全面的测试策略&#xff0c;以确保购物车在各种情况下的功能正常、性能良好和用户体验优秀。以下是一个详细的测试计划&#xff0c;包含了各个方面的测试。 功能测试&#xff1a; 添加商品到购物车&#xff1a;验证能否将商品成功添…

基于深度学习的端到端自动驾驶的最新进展:调研综述

基于深度学习的端到端自动驾驶的最新进展&#xff1a;调研综述 附赠自动驾驶学习资料和量产经验&#xff1a;链接 论文链接&#xff1a;https://arxiv.org/pdf/2307.04370.pdf 调研链接&#xff1a;https://github.com/Pranav-chib/ 摘要 本文介绍了基于深度学习的端到端自…

书生浦语笔记一

2023年6月&#xff0c;InternLM的第一代大模型正式发布。仅一个月后&#xff0c;该模型以及其全套工具链被开源。随后&#xff0c;在8月份&#xff0c;多模态语料库chat7B和lagent也被开源。而在接下来的9月份&#xff0c;InternLM20B的开源发布进一步加强了全线工具链的更新。…

猜数游戏(Python)

一、实验要求&#xff1a; &#xff08;1&#xff09;在游戏开始时&#xff0c;随机生成一个1~100之间的整数。 &#xff08;2&#xff09;在游戏中&#xff0c;玩家有10次机会猜数。如果10次都没有猜中&#xff0c;则游戏失败&#xff1b;否则&#xff0c;游戏成功。 &…

Linux:查询类型的命令type

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 type命令是Linux中一个查询类型的命令&#xff0c;它可以查询name是alias别名、keyword关键字、function函数名、builtin内建命令名&#xff08;这很有用&#xff09;或…

Linux系统使用Docker部署MeterSphere并实现公网访问本地测试平台

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

20240401,ALOHA WORLD

C了&#xff0c;虽然练习C还有9题不会做&#xff0c;但是不先继续往下学&#xff0c;肯定就凉了 #include <iostream> int main() {if (__cplusplus 201703L)std::cout << "C17\n";else if (__cplusplus 201402L)std::cout << "C14\n"…

Windows安装TortoiseSVN客户端结合Cpolar实现公网提交文件到本地服务器

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…

C++ | Leetcode C++题解之第2题两数相加

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {map<int,int> a;//提供一对一的hashvector<int> b(2,-1);//用来承载结果&#xff0c;初始化一个大小为2&#xff0c;值为-1的容…

Machine Learning机器学习之文本分析的知识图谱(详细讲解)

目录 前言 历史&#xff1a; 概念思想&#xff1a; 知识图谱主要发展历程&#xff1a; 知识图谱重要组成部份和特征&#xff1a; 知识图谱案列&#xff08;关于学院、课程、学生&#xff09;&#xff1a; 一、知识图谱的存储 二、知识图谱的构建过程 数据层&#xff1a; 模式…