力扣9.1

devtools/2024/11/20 4:33:24/

71.简化路径

题目

给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以'/' 开头),请你将其转化为更加简洁的规范路径。

Unix风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。

请注意,返回的 规范路径 必须遵循下述格式:

  • 始终以斜杠 '/' 开头。
  • 两个目录名之间必须只有一个斜杠 '/'
  • 最后一个目录名(如果存在)不能 以 ‘/’ 结尾。
  • 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.''..')。
    返回简化后得到的 规范路径 。
数据范围
  • 1 <= path.length <= 3000
  • path 由英文字母,数字,'.''/''_'组成。
  • path 是一个有效的 Unix 风格绝对路径。
分析

用栈维护所有的路径,遇到".."就出栈,遇到"."就不动,其他入栈,注意点细节

代码
class Solution {
public:stack<string> stk;string simplifyPath(string path) {int j = path.size() - 1;while(path[j] == '/' && j > 0) j -- ;string tmp = "";int i = 0;while(path[i] == '/' && i < path.size()) i ++ ;path = path.substr(i, j - i + 1);for(i = 0; i < path.size(); i ++ ) {if(path[i] == '/') {print();int j = i;while(path[j] == '/' && j < path.size()) j ++ ;i = j - 1;if(tmp == ".." && !stk.size()) {tmp = "";continue;} else if(tmp == ".." && stk.size()) stk.pop();else if(tmp == ".") tmp = "";else stk.push(tmp);tmp = "";}else {tmp += path[i];}}if(tmp == ".." && stk.size() != 0) {stk.pop();} else if(tmp == ".." && stk.size() == 0) {return "/";} else if(tmp != ".") stk.push(tmp);vector<string> res;while(stk.size()) {res.push_back(stk.top());stk.pop();}reverse(res.begin(), res.end());string ans = "";for(auto k : res) {ans += "/" + k;}if(ans.size() == 0) return "/";return ans;}
};

86. 分隔链表

题目

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你应当 保留 两个分区中每个节点的初始相对位置。

数据范围
  • 链表中节点的数目在范围 [0, 200]
  • -100 <= Node.val <= 100
  • -200 <= x <= 200
分析

用两个链表存小于x的数和大于等于x的数,最后合并

代码
/*** 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:ListNode* partition(ListNode* head, int x) {ListNode* h1 = new ListNode(0);ListNode* h2 = new ListNode(0);auto tmph1 = h1, tmph2 = h2;ListNode* p1, *p2, *q;q = head;int cnt = 0;while(q != NULL) {cnt ++ ;if(q -> val < x) {tmph1 -> next = q;tmph1 = q;} else {tmph2 -> next = q;tmph2 = q;}q = q -> next;}tmph1 -> next = h2 -> next;tmph1 = h1;while(tmph1 != NULL && cnt) {cnt -- ;tmph1 = tmph1 -> next;}tmph1 -> next = NULL;return h1 -> next;}
};

http://www.ppmy.cn/devtools/104740.html

相关文章

Python 算法交易实验86 QTV200日常推进-获取A股日交易额并统计

说明 上一篇说到&#xff0c;交易量可能可以作为策略规则的支持度分析&#xff0c;但是(我现在还不想付费买数据)现成的接口似乎并没有这样的统计。获取某一只股票的日交易数据是相对简单的&#xff0c;市场上也就不到5000只的股票&#xff0c;总数据量应该也不会超过18M(5000…

Zabbix_Proxy自动化安装脚本

Zabbix Proxy Shell 安装脚本 脚本说明 机器必须要能上网&#xff0c;这样仓库才能下载Zabbix proxy等组件我的Linux版本是CentOS8 Stream数据库我用的是mysql8.0版本Zabbix Server的版本是6.0LTS需要提前下载并上传到服务器上的mysql8.0 tar包到/opt目录下&#xff0c;文件命…

经验笔记:Hadoop

Hadoop经验笔记 一、Hadoop概述 Hadoop是一个开源软件框架&#xff0c;用于分布式存储和处理大规模数据集。其设计目的是为了在商用硬件上运行&#xff0c;具备高容错性和可扩展性。Hadoop的核心是Hadoop Distributed File System (HDFS) 和YARN (Yet Another Resource Negot…

C++ TinyWebServer项目总结(13. 多进程编程)

本章讨论Linux多进程编程的以下内容&#xff1a; 复制进程映像的fork系统调用和替换进程映像的exec系列系统调用。僵尸进程以及如何避免僵尸进程。进程间通信&#xff08;Inter Process Communication&#xff0c;IPC&#xff09;最简单的方式&#xff1a;管道。三种System V进…

this.$nextTick() 是 Vue.js 提供的一个方法

this.$nextTick() 是 Vue.js 提供的一个方法&#xff0c;用于在 DOM 更新完成后执行指定的代码。它的作用主要是确保在 Vue.js 完成 DOM 更新后&#xff0c;再执行某些依赖于更新的操作。这个方法通常用于处理需要在视图更新后立即进行的操作&#xff0c;如获取最新的 DOM 元素…

常用Numpy操作(笔记整理)

目录 一、常用&#xff08;自查&#xff09; 1. 创建数组&#xff08;array&#xff09; 2. 数组形状&#xff08;shape&#xff09; 3. 数组维度&#xff08;ndim&#xff09; 4. 数组⼤⼩&#xff08;size&#xff09; 5. 数组数据类型&#xff08;dtype&#xff09; …

论文速读|ReKep:空间时间理论的关系关键点约束,用于机器人操作

项目地址&#xff1a;ReKep | Spatio-Temporal ReasoningReKep | Spatio-Temporal Reasoning of Relational Keypoint Constraints for Robotic ManipulationReKep | Spatio-Temporal Reasoning ReKep&#xff08;Relational Keypoint Constraints&#xff09;是一种基于视觉的…

微信小程序遇到的问题

wx.redirectTo 跳转闪屏 wx.redirectTo 是让当前页面出栈&#xff0c;在加载新的页面&#xff0c;&#xff0c;&#xff0c;&#xff0c;当我的当前页是这个栈的唯一页面的时候&#xff0c;就会出现闪屏 想要像wx.navigateTo那样有过渡效果&#xff0c;可以先getCurrentPages(…