当前位置: 首页 > news >正文

【算法】数组、链表、栈、队列、树

头像
⭐️个人主页:@小羊
⭐️所属专栏:Linux
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

动图描述

目录

  • 持续更新中...
    • 数组、链表
      • 点击消除
      • 环形链表
      • 环形链表 II
    • 栈、队列


持续更新中…


数组、链表

点击消除

  • AB5 点击消除

在这里插入图片描述
这个题很容易想到用“栈”,但是创建一个stack最后还要转换成字符串,可以用string代替栈。
string的接口很多且实用,常见的接口基本都有:

在这里插入图片描述

这个题比较坑的是它说如果字符串为空串则返回0,谁想到返回的是"0",我试着返回0咋都过不去,最后吐了!都怪我太年轻了!

#include <iostream>
using namespace std;int main() 
{string str, st;cin >> str;for (char ch : str){if (!st.empty() && st.back() == ch){st.pop_back();continue;}st.push_back(ch);}cout << (st.empty() ? "0" : st);return 0;
}

环形链表

  • Leetcode——环形链表

在这里插入图片描述

快慢指针法: 快指针和慢指针初始时指向头节点,当快指针指向和快指针指向节点内的next指针不为空时,快指针一次走两步,慢指针一次走一步,快指针入环后走N圈后慢指针入环,当快指针和慢指针相等时说明存在环,如果出循环则说明不存在环。

关键的地方是快指针一次走两步,慢指针一次走一步,如果存在环则快指针和慢指针一定会相遇。为什么一定会相遇呢?
如果存在环,假设当慢指针入环时快指针距离此时慢指针的位置为N,则接下来每当快指针追赶慢指针一次,它们的距离就减一,直到减为0,此时快慢指针就相遇了。

在这里插入图片描述

bool hasCycle(struct ListNode *head) {struct ListNode* fast = head, *slow = head;while (fast && fast->next){fast = fast->next->next;slow = slow->next;if (fast == slow){return true;}}return false;
}

环形链表 II

  • Leetcode——环形链表 II

在这里插入图片描述

还是快慢指针,当快慢指针相遇时我们让meet指针指向相遇时的节点,然后让头指针headmeet指针一步步地向后走,当两指针相遇时指向的节点就是链表开始入环的第一个节点。为什么这两个指针一定会相遇在链表开始入环的第一个节点?

假设头指针距离链表开始入环的第一个节点的长度为L,meet指针相距链表开始入环的第一个节点的距离是N,环的长度为C,当慢指针入环时快指针走了x圈,因为快指针的速度是慢指针的2倍,那我们可以得到下面的等式:

  • 2(L + N) = L + X*C + N

化简得:L = X*C - N,由这个等式可以得出headmeet相遇是必然的。
在这里插入图片描述

struct ListNode *detectCycle(struct ListNode *head) {struct ListNode* fast = head, *slow = head;while (fast && fast->next){fast = fast->next->next;slow = slow->next;if (fast == slow){struct ListNode* meet = fast;while (head != meet){head = head->next;meet = meet->next;}return meet;}}return NULL;
}

栈、队列


本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

头像

http://www.mrgr.cn/news/94390.html

相关文章:

  • LeetCode 第8题:字符串转换整数 (atoi)
  • 个性化音乐推荐系统
  • 【菜鸟飞】通过vsCode用python访问公网deepseek-r1等模型(Tocken模式)
  • onnxruntime-gpu与cuda版本对应及是否能调用cuda测试
  • C盘清理技巧分享:释放空间,提升电脑性能
  • 色板在数据可视化中的创新应用
  • vue3 中使用 Recorder 实现录音并上传,并用Go语言调取讯飞识别录音(Go语言)
  • Xxl-Job学习笔记
  • python学习笔记-mysql数据库操作
  • excel中两个表格的合并
  • 网络通信(传输层协议:TCP/IP ,UDP):
  • 【MySQL】基本操作 —— DDL
  • django框架 [面试篇]
  • 基于Redis实现限流
  • Pytorch实现之BCGAN实现双生成器架构的人脸面部生成
  • Interview preparation.md
  • Redis 2025/3/9
  • 整合记录-持续
  • oracle11.2.0.4 RAC 保姆级静默安装(二) DB数据库软件
  • ES 使用geo point 查询离目标地址最近的数据