Leecode 0035. Search Insert Position
35. Search Insert Position题目Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You may assume no duplicates in the array. Example 1: 12Input: [1,3,5,6], 5Output: 2 Example 2: 12Input: [1,3,5,6], 2Output: 1 Example 3: 12Input: [1,3,5,6], 7Output: 4 Example 4: 12Input: [1,3,5,6], 0Output:...
Leecode 0069. Sqrt(x)
69. Sqrt(x)Given a non-negative integer x, return the square root of x rounded down to the nearest integer. The returned integer should be non-negative as well. You must not use any built-in exponent function or operator. For example, do not use pow(x, 0.5) in c++ or x ** 0.5 in python. Example 1: 123Input: x = 4Output: 2Explanation: The square root of 4 is 2, so we return 2. Example 2: 123Input: x = 8Output: 2Explanation: The square root of 8 is 2.82842..., and since we round it down to...
Leecode 0034. Find First and Last Position of Element in Sorted Array
34. Find First and Last Position of Element in Sorted Array题目Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value. Your algorithm's runtime complexity must be in the order of O(log n). If the target is not found in the array, return [-1, -1]. Example 1: Input: nums = [5,7,7,8,8,10], target = 8 Output: [3,4] Example 2: Input: nums = [5,7,7,8,8,10], target = 6 Output: [-1,-1] 查找第一个出现的位置: 当找到目标值时,不立即返回,而是继续向左查找(right...
Linux:内存映射实现文件复制详解
导言 在计算机系统的文件处理领域,数据传输效率是衡量程序性能的重要指标。传统文件复制操作依赖于read和write系统调用,这种方式在用户空间与内核空间之间存在多次数据拷贝过程,导致不可忽视的性能损耗。而基于内存映射(mmap)技术的文件复制方案,通过将文件内容直接映射至进程地址空间,有效减少数据拷贝次数,从而显著提升数据处理效率。本文将对一段基于内存映射的 C 语言文件复制代码进行深入分析,详细阐述其实现机制与设计原理。 一、头文件与宏定义123456789#include <sys/mman.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <sys/stat.h>#include <stdio.h>#include <stdlib.h>#define ARGS_CHECK(argc, num) if (argc != num) { fprintf(stderr, "Usage:...
Linux:实现目录树结构打印
一、引言:为什么需要实现目录树打印?在系统编程和文件管理场景中,直观展示目录结构是一项基础需求。通过递归遍历目录并以树状结构输出,我们可以: 学习价值:深入理解文件系统操作、递归算法和层级结构的编程实现; 工程实践:为文件管理器、备份工具、磁盘空间分析等程序提供基础功能; 调试辅助:快速查看目录结构,辅助定位文件路径问题。 本文将通过 C 语言实现一个完整的目录树打印程序,涵盖目录遍历、递归处理、树状符号渲染等核心技术点。 二、功能说明:目录树打印程序的核心能力 该程序通过以下功能实现目录结构的可视化: 递归遍历:从指定目录开始,递归扫描所有子目录; 树状渲染:使用├──、└──、│ 等符号构建层级结构; 排序显示:按字母顺序排列目录和文件; 错误处理:包含完整的错误检查和提示机制。 程序运行效果示例: 12345678910projects/├── src/│ ├── main.c│ └── utils/│ ├── string.c│ └── file.c├── include/│ ├── utils.h│ └──...
Linux:文件系统编程函数统计
一、基于 tar 命令的代码压缩技术实践在日常软件开发工作流中,代码文件的压缩归档是一项基础且核心的操作。tar 命令结合 Gzip 压缩算法,是实现高效文件压缩存储的典型解决方案,该方案不仅能够显著减小文件存储体积,同时可完整保留文件目录结构信息。 文件归档与压缩实现通过tar cfvz参数组合,可将所有以test开头的文件及目录打包并压缩为package.tar.gz格式文件,从而实现文件体积的有效缩减,具体命令如下: 1tar cfvz package.tar.gz test* # 归档并压缩 其中,c参数表示创建新的归档文件,f参数用于指定归档文件名,v参数可在操作过程中显示详细执行信息,z参数则启用 Gzip 压缩功能。 压缩文件解包操作使用tar xzvf命令可对已压缩的文件包进行解压缩处理,具体操作指令如下: 1tar xzvf package.tar.gz # 解压缩 二、Vim 文本编辑器核心操作指令解析Vim...
文件系统编程深度解析:从目录流到 IO 多路复用
一、目录流操作与文件系统基础1.目录流核心概念体系目录流是 Linux 文件系统中用于读取目录信息的核心机制,其设计基于 "一切皆文件" 的哲学思想。在 Linux 系统中,目录本质上是一种特殊文件,存储着文件名与 inode 节点的映射关系。目录流操作通过一组系统调用与库函数,实现了对目录内容的遍历与管理。 从系统架构视角看,目录流操作涉及三层关键概念: 系统调用层:用户空间与内核交互的底层接口,如open_dir、read_dir等,直接对应内核文件系统模块的操作 库函数层:对系统调用的封装抽象,如 POSIX 标准定义的opendir()、readdir()等函数 内核结构层:Linux 内核中文件系统相关的数据结构,如inode、dentry等核心结构体 POSIX 标准的形成标志着目录流操作的规范化发展。该标准定义了 26 个与文件系统相关的头文件,确保了 UNIX/Linux 系统间的接口兼容性。而 ISO-C 标准定义的 24 个头文件则提供了更基础的 C...
探秘 Linux 目录流:从概念到实践的深度解析
导言 在 Linux 操作系统的体系架构中,目录流作为文件系统交互的核心组件,承担着目录信息检索与层级结构遍历的关键功能。对于系统开发者与运维工程师而言,深入剖析目录流的理论基础与实践机制,是掌握 Linux 系统编程范式与实现高效系统管理的必要前提。 一、目录流的核心概念 1.1 目录流的定义与作用目录流是一组用于目录信息检索与遍历操作的函数集合,在 Linux 文件系统树形结构的构建与维护中发挥着关键作用。通过目录流接口,用户能够获取目录下的文件与子目录元数据,解析文件属性信息,从而实现对文件系统的精细化操作。该机制广泛应用于文件管理工具开发、数据备份系统构建以及系统监控程序设计等领域。 1.2 系统调用:用户空间与内核的桥梁系统调用作为用户空间与内核交互的唯一标准接口,构成了目录流功能实现的底层支撑体系。当用户空间程序调用目录流相关函数时,通过系统调用机制将请求传递至内核态,由内核完成具体操作并返回执行结果。 在这一过程中,C 标准库与 POSIX...
只有结构体指针指向结构体
导言 在 C 语言程序设计体系中,结构体(struct)作为一种复合数据类型,其核心价值在于能够将不同数据类型进行聚合封装,从而为复杂数据结构的构建与处理提供了坚实的基础。从操作系统内核的数据管理,到嵌入式系统的设备驱动开发,结构体都扮演着不可或缺的角色。 然而,在实际工程实践中,尽管开发者能够熟练使用结构体的基础语法,但对于其底层实现机制、指针操作规范以及类型安全约束等深层次原理,往往缺乏系统性认知。(没错就是在下) 基于此,本文将围绕结构体与指针的关键技术问题展开深入探讨,通过理论分析与代码实例相结合的方式,揭示其内在运行逻辑,以期为 C 语言开发者提供更为全面和深入的技术参考。 一、 结构体指针指向特性的深入剖析 1.1 非类型匹配指针操作的风险与未定义行为在 C 语言严格的类型系统框架下,虽然从语法层面允许指针类型的强制转换,但使用非结构体类型指针指向结构体对象会触发未定义行为(Undefined Behavior),这一特性源于 C 语言内存访问机制与类型安全原则的内在关联。根据 C 标准,指针类型决定了其解引用时的内存访问粒度和解析方式,例如在典型的 32...
从趣味到深度:《大话数据结构》进阶学习指南
一、导言 《大话数据结构》作为数据结构领域的入门经典著作,以 “趣味化”“通俗化” 的内容呈现方式著称。作者程杰突破传统学术教材的严谨性写作范式,通过具象化生活场景构建专业理论映射关系。例如,采用 “排队购票” 模型阐释线性表的顺序存储特性,借助 “家族谱系” 概念解析树形结构的层级关系,显著降低了学科知识的理解门槛。书中辅以可视化图表、生动化语言表达及完整代码示例,有助于初学者快速构建数据结构的基础理论框架。然而,过度口语化的表述削弱了学术论述的严谨性,在算法前沿研究成果与高阶理论体系构建方面存在不足,建议作为入门启蒙教材使用,并配合专业学术著作进行后续深化学习。 二、各部分学习笔记与评价 (一)基础概念与逻辑结构 学习笔记本书系统梳理了数据结构的基础理论体系,明确界定了数据、数据元素、数据对象等核心概念,并着重阐释了逻辑结构(集合结构、线性结构、树形结构、图形结构)与物理结构(顺序存储结构、链式存储结构)的理论分野与实践关联。通过对比数组(顺序存储)和链表(链式存储)在数据插入、删除操作中的性能差异,直观展现了物理存储结构对算法执行效率的影响机制。同时引入...
Leecode 0027. Remove Element
27. Remove Element给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作: 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。 返回 k。 用户评测: 评测机将使用以下代码测试您的解决方案: 123456789101112int[] nums = [...]; // 输入数组int val = ...; // 要移除的值int[] expectedNums = [...]; // 长度正确的预期答案。 // 它以不等于 val 的值排序。int k = removeElement(nums, val); // 调用你的实现assert k == expectedNums.length;sort(nums, 0, k); // 排序...
Leecode 0026. Remove Duplicates from Sorted Array
26. Remove Duplicates from Sorted Array给你一个 非严格递增排列 的数组 nums ,请你** 原地** 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过: 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。 返回 k 。 判题标准: 系统会用下面的代码来测试你的题解: 123456789int[] nums = [...]; // 输入数组int[] expectedNums = [...]; // 长度正确的期望答案int k = removeDuplicates(nums); // 调用assert k == expectedNums.length;for (int i = 0; i < k; i++) { assert...
Leecode 0033. Search in Rotated Sorted Array
33. Search in Rotated Sorted Array题目Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]). You are given a target value to search. If found in the array return its index, otherwise return -1. You may assume no duplicate exists in the array. Your algorithm's runtime complexity must be in the order of O(log n). Example 1: Input: nums = [4,5,6,7,0,1,2], target = 0 Output: 4 Example 2: Input: nums...
Linux:类似ls -al的目录列表程序
一、引言 在 Linux 操作系统生态中,ls - l命令作为文件系统目录信息检索的核心工具,能够以列表形式结构化呈现文件及目录的详细元数据信息,在系统管理、软件开发、运维保障等场景中具有不可替代的作用。通过自主开发具备类似功能的程序,有助于深入理解文件系统接口规范、系统调用机制及 C 语言在底层编程中的应用范式。本文提出的directory_lister.c程序,旨在通过 C 语言编程实现ls - l命令的核心功能,为相关领域的学术研究与工程实践提供可复用的技术样本。 二、程序整体架构设计 2.1 功能模块划分directory_lister.c程序基于模块化设计理念,划分为四个核心功能模块,各模块通过清晰的接口定义实现协同工作,共同完成目录列表功能: 参数解析模块:该模块负责解析命令行输入参数,实现目标目录路径的动态确定。程序通过argc(命令行参数数量)和argv(参数数组)获取用户输入,若未指定目录路径,则自动将当前工作目录作为默认目标。这种设计符合 Linux...
Linux:测试不同缓冲区大小对文件复制性能的影响
一. 文件复制性能测试程序技术解析在计算机系统性能优化领域,I/O 操作效率一直是关键研究方向。本文将深入解析一个用于测试不同缓冲区大小对文件复制性能影响的 C 语言程序,从底层系统调用到高层性能分析,全面阐述其技术实现与优化细节。 二. 程序整体架构设计该程序通过动态调整缓冲区大小(1KB 至 1MB),对文件复制过程进行性能测试。整体架构遵循 "打开 - 读取 - 写入 - 关闭" 的经典 I/O 操作流程,并引入精确计时机制与健壮的错误处理逻辑。程序的核心创新点在于:通过控制单一变量(缓冲区大小)来量化其对 I/O 性能的影响,为系统调优提供数据支撑。 三. 核心函数功能解析3.1 系统调用层函数3.1.1 open 函数12int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t...
Leecode 0015. 3Sum
15. 3Sum题目Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: The solution set must not contain duplicate triplets. Example: 1234567Given array nums = [-1, 0, 1, 2, -1, -4],A solution set is:[ [-1, 0, 1], [-1, -1, 2]] 题目大意给定一个数组,要求在这个数组中找出 3 个数之和为 0 的所有组合。 解题思路用 map 提前计算好任意 2 个数字之和,保存起来,可以将时间复杂度降到...
Leecode 0017. Letter Combinations of a Phone Number
17. Letter Combinations of a Phone Number题目Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters. Example: 12Input: "23"Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. Note: Although...
Leecode 0016. 3Sum Closest
16. 3Sum Closest题目Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would have exactly one solution. Example: 123Given array nums = [-1, 2, 1, -4], and target = 1.The sum that is closest to the target is 2. (-1 + 2 + 1 = 2). 题目大意给定一个数组,要求在这个数组中找出 3 个数之和离 target 最近。 解题思路 初始值优化: 原代码中it初始化为...
C 语言红黑树:原理剖析与深度解析
导言 在 C 语言程序设计的庞大体系中,数据结构作为算法实现的根基,其设计与选择直接决定了软件系统的时间复杂度和空间复杂度。红黑树作为自平衡二叉搜索树中的经典代表,凭借独特的结构特性与精妙的算法机制,在动态数据集合的高效管理领域占据着举足轻重的地位。然而,在与同行朋友的交流中,我发现大家对红黑树往往存在畏惧心理,甚至谈之色变。诚然,红黑树规则之复杂、调整逻辑之精妙,确实让人望而生畏,但拨开层层迷雾就会发现,它本质上不过是为了让计算简便而精心设计的工具。 这种畏惧感并非空穴来风。红黑树的五条规则看似简单,实则暗藏玄机;插入删除时的旋转与染色操作,组合出多种复杂场景,让不少开发者在学习时如坠云里雾里。但如果我们转换视角,从它诞生的背景和目标出发,就能理解它的设计逻辑 ——...
Google C 语言编程风格指南学习笔记:从规范到实践
导言作为 C 语言开发者,遵循统一的编程风格不仅能提升代码可读性,还能减少潜在错误。本文基于 Google C/C++ 风格指南(侧重 C 语言部分),结合实际开发场景,梳理核心规范与实践建议,助你写出更专业、更健壮的 C 代码。 一、头文件:代码的 “入口守卫”头文件是 C 语言模块化的核心,其规范直接影响代码的可维护性与编译效率。 1. 头文件防护符:防止重复包含规则:每个头文件必须用#ifndef/#define/#endif防护,防护符名称应基于文件在项目中的完整路径(小写 + 下划线连接)。 原因:避免同一头文件被多次包含导致的类型重复定义错误。 示例(错误→正确): 1234567// 错误:防护符与文件路径无关,易冲突#ifndef UTILS_H#define UTILS_H// 正确:基于完整路径(假设文件在project/utils/io.h)#ifndef PROJECT_UTILS_IO_H#define PROJECT_UTILS_IO_H#endif 2. 头文件导入顺序:明确依赖关系规则:按以下顺序导入头文件(从...