leetcode力扣_双指针问题

141. 环形链表

思路:判断链表中是否有环是经典的算法问题之一。常见的解决方案有多种,其中最经典、有效的一种方法是使用 快慢指针(Floyd’s Cycle-Finding Algorithm)

  • 初始化两个指针:一个快指针(fast)指向头节点的下一个节点(head->next),一个慢指针(slow)指向头节点(head)。
  • 移动指针
    • 慢指针每次移动一步。
    • 快指针每次移动两步。
  • 判断环的存在
    • 如果链表中存在环,那么快指针和慢指针最终会在环中相遇。
    • 如果链表没有环,快指针会遇到 NULL(链表的末尾)。

解答如下:

/*** 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* slow = head;ListNode* fast = head->next;//循环停止的条件是slow和fast指向同一个元素//或者 fast或fast->next指向NULLwhile(slow != fast){if(fast == nullptr  || fast->next == nullptr ){return false ;}slow = slow->next ;fast = fast->next->next ;}return true ;}
};

循环条件也可以改为其他的形式,或者使用do-while循环,使用do-while循环,则需要对fast和slow的初值进行更改:

//使用do-while循环
class Solution {
public:bool hasCycle(ListNode *head) {//如果头指针为空或者下一个为空即链表只有一个元素//那么这个链表就不是循环的if(head == nullptr  || head->next == nullptr ){return false ;}ListNode* slow = head;ListNode* fast = head;//循环停止的条件是slow和fast指向同一个元素//或者 fast或fast->next指向NULLdo{if(fast == nullptr || fast->next == nullptr){return false ;}slow = slow->next ;fast = fast->next->next ;}while(slow != fast);return true ;}
};

另外也可以将fast != nullptr && fast->next != nullptr放在外层:

class Solution {
public:bool hasCycle(ListNode *head) {//如果头指针为空或者下一个为空即链表只有一个元素//那么这个链表就不是循环的if(head == nullptr  || head->next == nullptr ){return false ;}ListNode* slow = head;ListNode* fast = head;//循环停止的条件是slow和fast指向同一个元素//或者 fast或fast->next指向NULLwhile(fast != nullptr && fast->next != nullptr){//在循环中应首先移动指针,然后再检查 slow 和 fast 是否相等slow = slow->next ;fast = fast->next->next ;if(slow == fast){return true ;}}return false ;}
};

524. 通过删除字母匹配到字典里最长单词

题目描述:给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。

思路:开始自己想起来有点乱糟糟的,看了一下官方给的思路,然后理了一下。

在写的过程中,while块中的语句些的稍微复杂了一点,看了别人的代码后改了一下,原来是这样写的:完全按照想的逻辑,没有思考简化

while(m<slen){//只要还没将s搜索完就要继续搜索if(s[m] == dictionary[i][d]){d++;m++;} else{m++;}
}

然后就是if块中的代码,写得乱糟糟的也,看了一下别人的代码,茅塞顿开,我写的时候在想,怎么才能顺利的存进去第一个满足要求的字符串,因为最开始没有目标字符串,怎么比较长度呢,后来知道使用默认构造函数 string ans; 定义一个 std::string 对象时,它会被初始化为一个空字符串,长度为0,所以可以这样直接比较。

基础薄弱脑袋空空

正确代码如下:

class Solution {
public:string findLongestWord(string s, vector<string>& dictionary) {int k = dictionary.size();//长度为4int slen = s.length();//长度为8string obj ;for(int i = 0;i<k;i++){//int cnt = 0;//获得每一个元素的长度lenint len = dictionary[i].size();//例如第一个元素为ale,长度就为3//下面判断该元素是不是字符串s的子元素int m=0,d=0;while(m<slen){//只要还没将s搜索完就要继续搜索if(s[m] == dictionary[i][d]){d++;} m++;}//cnt==len说明该字符串在字典中存在if(d == len ){if(len > obj.length()){obj = dictionary[i];//有点奇怪,为什么要加一个dictionary[i] < obj这个条件//原题目中字母序最小的字母序最小的字符串是这个意思嘛//比较相同长度的字符串的大小,输出小的作为最后的结果} else if((len == obj.length()) && dictionary[i] < obj){obj = dictionary[i] ;} else{obj = obj ;}}}return obj;}
};//csdn上的答案
/*class Solution {
public:string findLongestWord(string s, vector<string>& dictionary) {//处理string ans;int n = s.size();//字符串的长度//auto& str : dictionary 是 C++11 引入的范围基 for 循环的一部分//用于遍历容器 dictionary 中的每个元素,并使用 str 作为对每个元素的引用。for (auto& str : dictionary){int m = str.size();//dictionary中元素的长度int i = 0, j = 0;while (i < m && j < n){if (str[i] == s[j]) i++;j++;}//处理if (i == m){if (str.size() > ans.size()){ans = str;}else if (str.size() == ans.size() && str < ans){ans = str;}}}return ans;}
};*/

双指针问题告一小段落,前面还有几题写了但是没有记录,懒得再整理了力扣上留有痕迹

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

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

相关文章

uni-app 使用Pinia进行全局状态管理并持久化数据

1.引言 最近在学习移动端的开发&#xff0c;使用uni-app前端应用框架&#xff0c;通过学习B站的视频以及找了一个开发模板&#xff0c;终于是有了一些心得体会。 B站视频1&#xff1a;Day1-01-uni-app小兔鲜儿导学视频_哔哩哔哩_bilibili B站视频2&#xff1a;01-课程和uni的…

[FFmpeg] windows下安装带gpu加速的ffmpeg

1.显卡能力排查 目前只有 NIVIDIA 支持 ffmpeg 的 gpu加速(AMD貌似也陆续开始支持)。 在下述网站中查找自己的显卡能够支持的编解码格式。https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-newhttps://developer.nvidia.com/video-encode-and-decod…

Vue88-Vuex中的mapActions、mapMutations

一、mapMutations的调用 此时结果不对&#xff0c;因为&#xff1a;若是点击事件不传值&#xff0c;默认传的是event&#xff01;&#xff0c;所以&#xff0c;修改如下&#xff1a; 解决方式1&#xff1a; 解决方式2&#xff1a; 不推荐&#xff0c;写法麻烦&#xff01; 1-…

【Unity数据交互】二进制私

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 专栏交流&#x1f9e7;&…

电脑硬盘分区的基本步骤(2个实用的硬盘分区方法)

在现代计算机中&#xff0c;硬盘分区是非常重要的一步。无论是新硬盘的初始化&#xff0c;还是重新组织现有硬盘&#xff0c;分区都是必不可少的操作。本文将详细介绍电脑硬盘分区的基本步骤&#xff0c;帮助您更好地管理和利用硬盘空间。 文章开始&#xff0c;我们先简单说一…

【C++】 解决 C++ 语言报错:Invalid Conversion from ‘const char*’ to ‘char*’

文章目录 引言 在 C 编程中&#xff0c;类型转换错误&#xff08;Invalid Conversion&#xff09;是常见的编译错误之一。特别是当程序试图将一个常量字符指针&#xff08;const char*&#xff09;转换为非常量字符指针&#xff08;char*&#xff09;时&#xff0c;会导致编译…

Vmware环境下ESXi主机 配置上行链路、虚拟交换机、端口组、VMkernel网卡

一、适用场景 1、使用专业服务器跑多种不同的业务&#xff0c;每种业务可能所需运行的server环境不同&#xff0c;有的需要Linux server CentOS7/8、kali、unbuntu……有的需要windows server2008、2003、2016、2019、2022…… 2、本例采用的是VMware ESXi6.7 update 3版本&am…

力扣习题--找不同

目录 前言 题目和解析 1、找不同 2、 思路和解析 总结 前言 本系列的所有习题均来自于力扣网站LeetBook - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 题目和解析 1、找不同 给定两个字符串 s 和 t &#xff0c;它们只包含小写字母。 字符串 t…

Java Maven中自动代码检查插件详细介绍

文章目录 Checkstyle主要特点使用场景配置与使用checkstyle.xmlsuppressions.xml 验证打包时验证执行命令验证 Spotless配置文件内容Java配置部分POM 配置部分Markdown 配置部分Up to Date Checking执行部分 验证打包时验证在插件中执行命令验证 Checkstyle Spotless 结合chec…

redis学习(005 java客户端 RedisTemplate学习)

黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第16p-第p23的内容 文章目录 java客户端jedisSpringDataRedis项目实现hash哈希操作 java客户端 jedis 测试 ps:如果连接不上&…

vs2019 无法打开项目文件

vs2019 无法打开项目文件&#xff0c;无法找到 .NET SDK。请检查确保已安装此项且 global.json 中指定的版本(如有)与所安装的版本相匹配 原因&#xff1a;缺少组件 解决方案&#xff1a;选择需要的组件进行安装完成

步进电机改伺服电机

步进电机&#xff1a; 42&#xff1a;轴径5mm 57&#xff1a;轴径8mm 86&#xff1a;轴径14mm 【86CME120闭环】// 12牛米 伺服电机&#xff1a; 40&#xff1a; 60&#xff1a; 80&#xff1a; 86&#xff1a; ECMA——C 1 0910 R S 4.25A 轴径…

评价ChatGPT与强人工智能的未来

在人工智能领域&#xff0c;ChatGPT的出现无疑是一个里程碑事件。它不仅展示了自然语言处理技术的巨大进步&#xff0c;也引发了人们对于强人工智能&#xff08;AGI&#xff09;的无限遐想。本文将从多个角度评价ChatGPT&#xff0c;并探讨强人工智能距离我们还有多远。 ChatGP…

无人机运营合格证及无人机驾驶员合格证(AOPA)技术详解

无人机运营合格证及无人机驾驶员合格证&#xff08;AOPA&#xff09;技术详解如下&#xff1a; 一、无人机运营合格证 无人机运营合格证是无人机运营企业或个人必须获得的证书&#xff0c;以确保无人机在运营过程中符合相关法规和标准。对于无人机运营合格证的具体要求和申请…

无人机人员搜救

人员搜救-水域救援 水域搜救&#xff1a;快速水面搜查 物资抛投&#xff1a;救生物资抛投 绳索牵引&#xff1a;牵引救援绳索 领航船艇&#xff1a;水面侦察领航 人员搜救 昼夜搜救&#xff0c;精准定位 水域搜救 经纬 M300 RTK 搭载禅思 H20T 能够满足全天候作业需求&a…

新手教学系列——Git Stash踩坑

在之前的文章《如何彻底避免Git代码相互覆盖问题》中,我曾介绍过通过规范分支合并和使用git stash来避免代码覆盖问题。今天,我要深入探讨一下git stash的使用,并分享一些使用过程中遇到的坑,希望能帮你避免类似问题。 脚本mg.sh简介 为了更好地管理代码合并,我编写了一…

linux之管道重定向

管道与重定向 一、重定向 将原输出结果存储到其他位置的过程 标准输入、标准正确输出、标准错误输出 ​ 进程在运行的过程中根据需要会打开多个文件&#xff0c;每打开一个文件会有一个数字标识。这个标识叫文件描述符。 进程使用文件描述符来管理打开的文件&#xff08;FD--…

windows USB 设备驱动开发-控制传输的数据包

每次在主机控制器和 USB 设备之间移动数据时&#xff0c;都会发生传输。 通常&#xff0c;USB 传输可大致分为控制传输和数据传输。 所有 USB 设备都必须支持控制传输&#xff0c;并且可以支持用于数据传输的端点。 每种类型的传输都与设备缓冲区USB 端点 的类型相关联。 控制传…

泛微开发修炼之旅--32ecology对接海康威视综合安防管理系统,人脸识别机器数据同步代码方案及源码

文章链接&#xff1a;32ecology对接海康威视综合安防管理系统&#xff0c;人脸识别机器数据同步代码方案及源码

Open3D 在点云中构建八叉树

目录 一、概述 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2构建后点云 一、概述 八叉树&#xff08;Octree&#xff09;是一种树状数据结构&#xff0c;用于递归地将3D空间分割成较小的立方体。八叉树特别适用于3D计算机图形学、点云处理和空间…