当前位置:首页 > 技术 > 正文内容

Linux指令整理与算法解题实践

访客 技术 2026年7月15日 1

一、Linux基础知识梳理

今天整理了Linux系统的核心特点、文件分类以及开发中常用的命令,形成可直接参考的笔记。

1. Linux系统特点

  • 开源:源代码公开,可自由修改和分发
  • 多用户:支持多个用户同时登录使用
  • 多任务:能同时高效调度多个程序运行
  • 一切皆文件:设备、目录、进程等都被视为文件

2. 文件类型标识

  • 普通文件:- (如文本文件、二进制文件等)
  • 目录文件:d (存储其他文件或目录)
  • 设备文件:b(块设备,如硬盘)、c(字符设备,如键盘)
  • 软链接:l (指向原文件的快捷方式,原文件删除则失效)
  • 管道文件:p (用于进程间通信)
  • 套接字:s (用于网络通信)

3. 常用命令详解

(1)输出重定向与管道

  • > 覆盖输出,>> 追加输出
  • | 管道符:将前一个命令的输出作为下一个命令的输入,常与 greplesswc 搭配使用
  • 示例:ls -l | grep ".txt" 过滤当前目录的txt文件

(2)ls 命令

  • ls -l:详细列表显示权限、所有者、大小、修改时间等
  • ls -a:显示所有文件(含隐藏文件)
  • ls -h:人性化显示文件大小(如KB、MB)

(3)硬链接与软链接

  • 硬链接:ln 源文件 链接文件,与原文件共用inode,删除原文件不影响链接文件
  • 软链接:ln -s 源文件 链接文件,单独inode指向原文件路径,原文件删除则链接失效

(4)软件安装与卸载

  • apt 命令(Debian/Ubuntu):apt install 安装、apt remove 卸载、apt update 更新源
  • dpkg 命令:dpkg -i 安装本地deb包、dpkg -r 卸载

(5)压缩与解压

  • tar 命令:tar -zcvf 包名.tar.gz 目标文件 压缩,tar -zxvf 包名.tar.gz 解压
  • zip 命令:zip 包名.zip 目标文件 压缩,unzip 包名.zip 解压

(6)时间相关命令

  • date:直接输入显示当前时间(CST中国标准时间)
  • date +格式+%F 年月日,+%T 时分秒,+%F %T 同时显示
  • date -d "-1 day" 显示一天前时间,单位可换为 year、month、hour、minute、second,+表示未来,-表示过去
  • cal:显示当前月日历,cal -3 显示前后三月,cal 年份 显示全年,cal 月 年 显示指定月

(7)man 命令 语法:man 命令,查看命令详细手册,按 q 退出。

二、算法刷题实战

今天练习了四道中等难度的经典题目,覆盖滑动窗口、双指针、链表、贪心等思路。每道题都附完整代码和简要解析。

1. 无重复字符的最长子串

题目:给定字符串 s,找出不含重复字符的最长子串长度。

思路:滑动窗口 + 哈希集合。左右指针构成窗口,右指针遍历,遇到重复字符时左指针收缩并删除集合中对应字符,然后插入当前字符并更新最大长度。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_set<char> st;
        int maxLen = 0, left = 0;
        for (int right = 0; right < s.size(); ++right) {
            while (st.count(s[right])) {
                st.erase(s[left++]);
            }
            st.insert(s[right]);
            maxLen = max(maxLen, right - left + 1);
        }
        return maxLen;
    }
};

2. 盛最多水的容器

题目:整数数组 height 表示垂线高度,找出两条线与x轴围成的容器能装的最大水量。

思路:双指针从两端向中间移动。水量 = 宽度 × 最小高度。每次移动高度较小的指针,因为移动较高的指针水量必然减少。

class Solution {
public:
    int maxArea(vector<int>& height) {
        int water = 0, left = 0, right = height.size() - 1;
        while (left < right) {
            int h = min(height[left], height[right]);
            int w = right - left;
            water = max(water, h * w);
            if (height[left] < height[right]) ++left;
            else --right;
        }
        return water;
    }
};

3. 随机链表的复制

题目:复制一个带有随机指针的链表。

思路:三步法。先在每个原节点后插入复制节点;再处理random指针,新节点random指向原节点random的next;最后拆分链表取出新节点。

class Solution {
public:
    Node* copyRandomList(Node* head) {
        if (!head) return nullptr;
        Node* cur = head;
        // 在每个原节点后插入复制节点
        while (cur) {
            Node* newNode = new Node(cur->val);
            newNode->next = cur->next;
            cur->next = newNode;
            cur = newNode->next;
        }
        // 处理random指针
        cur = head;
        while (cur) {
            Node* newNode = cur->next;
            newNode->random = cur->random ? cur->random->next : nullptr;
            cur = newNode->next;
        }
        // 拆分链表
        Node* newHead = head->next;
        Node* curNew = newHead;
        cur = head;
        while (cur && curNew) {
            cur->next = curNew->next;
            cur = cur->next;
            if (cur) {
                curNew->next = cur->next;
                curNew = curNew->next;
            }
        }
        return newHead;
    }
};

4. 字典序最小回文串

题目:将字符串改为回文串,替换字符时确保字典序最小。

思路:双指针从两端向中间遍历。字符不同时,将较大的字符替换为较小的;相同则直接移动指针。

class Solution {
public:
    string makeSmallestPalindrome(string s) {
        int l = 0, r = s.size() - 1;
        while (l < r) {
            if (s[l] == s[r]) {
                ++l; --r;
            } else if (s[l] < s[r]) {
                s[r--] = s[l++];
            } else {
                s[l++] = s[r--];
            }
        }
        return s;
    }
};

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。