- 博客(86)
- 收藏
- 关注
原创 Unix信号处理
当更改信号动作时,如果sa_handler指向一个信号捕捉函数(不是常数SIG_IGN或者SIG_DFL),则sa_mask字段说明了一个信号集,在调用信号捕捉函数之前,该信号集要加到进程的信号屏蔽集。比较特殊的是,exec函数将原先设置为要捕捉的信号都更改为默认动作,其他信号的状态则不变(一个进程原先要捕捉的信号,当其执行一个新程序后,就自然不能再被捕捉了,因为信号捕捉函数的地址很可能在所执行的新程序文件中已无意义)。当捕捉到一个信号时,进入信号捕捉函数,此时当前的信号被自动加到进程的信号屏蔽字中。
2024-10-18 11:29:41 779
原创 makefile语法注意点
(1)有两个变量,一个是SHELL,一个是MAKEFLAGS,这两个变量不管是否export,总是传递到下层Makefile中,特别是MAKEFLAGS,其中包含了make的参数信息,如果我们执行"总控Makefile"时有make参数或是在上层Makefile中定义了这个变量,那么MAKEFLAGS变量将会是这些参数,并会传递到下层Makefile中,这是一个系统级别的环境变量。make只管文件的依赖性,即,如果在我找了依赖关系以后,冒号后面的文件还是不在,那么停止make工作。
2024-09-12 16:54:26 397
原创 最长回文子串
遍历字符串,计算以当前字符为中心的最长回文字串。以此类推,记录最长字串长度和中心点。该题分两次计算,一次计算长度为单数的最长子串,一次计算长度为双数的最长子串。给你一个字符串 s,找到 s 中最长的回文子串。解释:“aba” 同样是符合题意的答案。输入:s = “babad”输入:s = “cbbd”
2022-11-13 15:11:11 258 1
原创 UNIX环境高级编程-第六章-系统数据文件和信息
它所做的一切是以成功状态终止。在wtmp文件的注销记录中,ut_name字段清除为0.在系统再启动时,以及更改系统事件和日期的前后,都在wtmp文件中追加写特殊的记录项。但是,对于较大的系统,顺序扫描口令文件很花费时间,我们需要能够以非ASCII文本格式存放这些文件,但仍向使用其他文件格式的应用程序提供接口,对于这些数据文件的可移植接口是本章的主题。UNIX系统的正常运作需要适用大量与系统有关的数据文件,例如,口令文件/etc/passwd和组文件/etc/group就是经常被多个程序频繁适用的两个文件。
2022-09-29 17:59:38 1154
原创 UNIX环境高级编程-第五章
只有两个函数可改变流的定向。第二,任何时候只要通过标准IO库要求从(a)一个不带缓冲的流,或者(b)一个行缓冲的流得到输入数据,那么就会冲洗所有行缓冲输出流。该对象通常是一个结构,它包含了标准IO库为管理该流需要的所有信息,包括用于实际IO的文件描述符,指向用于该流缓冲区的指针,缓冲区的长度,当前在缓冲区中的字符数以及出错标志等。在本章中,我们UNIX系统环境中说明标准标准IO库,正如前述,此标准库已移植到UNIX之外的很多系统中,但是为了说明该库实现的一些细节,我们将讨论其在UNIX系统上的典型实现。
2022-09-13 11:32:27 396
原创 Unix环境高级编程-第四章
否则,在默认情况下,返回的是符号链接所指向的实际文件的信息。但是可以在文件模式字(st_mode)中设置一个特殊标志,其含义是"当执行此文件时,将进程的有效用户ID设置为文件所有者的用户ID(st_uid)"。lstat函数类似于stat,但是当命名的文件是一个符号链接时,lstat返回该符号链接的有关信息,而不是由该符号链接引用的文件的信息。(3)保存的设置用户ID和保存的设置组ID在执行一个程序时包含了有效用户ID和有效组ID的副本,在8.11节中说明setuid函数时,将说明这两个保存值的作用。
2022-08-23 17:26:13 441
原创 UNIX环境高级编程-第二章
①编译时选项定义在②与文件或目录无关的运行时选项用sysconf函数来判断。③与文件或目录有关的运行时选项通过调用pathconf和fpathconf函数来判断。如果符号常量未定义,则必须使用sysconf,pathconf或fpathconf来判断是否支持该选项。这种情况下,这些函数的name参数前缀_POSIX必须替换位_SC或_PC。对于以_XOPEN为前缀的常量,在构成name参数时必须在其前放置_SC或_PC。
2022-08-04 20:02:00 354
原创 UNIX环境高级编程-第一章
口令文件中的登陆项由7个以冒号分隔的字段组成,依次是:登录名,加密口令,数字用户ID(205),数字组ID(105),注释字段,起始目录(/home/sar)以及shell程序(/bin/ksh)。与资源相关的非致命性出错包括:EAGAIN,ENFILE,ENOBUFS,ENOLCK,ENOSPC,EWOULDBLOCK,有时ENOMEM也是非致命性出错。按惯例,每当运行一个新程序时,所有的shell都为其打开3个文件描述符,即标准输入,标准输出以及标准错误。通常每个用户有一个唯一的用户ID。
2022-08-02 18:46:29 615
原创 leetcode-相同的树
题目:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,2], q = [1,null,2]输出:false示例 3:输入:p = [1,2,1], q = [1,1,2]输出:false代码1:利用队列解决。也就是广度优先搜索/** * Definition for a bi
2022-04-29 09:30:59 156
原创 C++编程-两数之和IV-leetcode653
题目:给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。示例 1:输入: root = [5,3,6,2,4,null,7], k = 9输出: true示例 2:输入: root = [5,3,6,2,4,null,7], k = 28输出: false代码1:思路:建立两个链表,一个升序,一个降序,相当于从一个数组两端相向而行,不断靠近,直到某一个结果符合题意。/** * Definition for a
2022-04-27 16:54:28 253
原创 C++编程-验证二叉搜索树
题目:给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:root = [2,1,3]输出:true示例 2:输入:root = [5,1,4,null,null,3,6]输出:false解释:根节点的值是 5 ,但是右子节点的值是 4 。代码:/** * Definition for a bi
2022-04-27 16:08:36 1659
原创 C++编程-二叉搜索树的插入
题目:给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。示例 1:输入:root = [4,2,7,1,3], val = 5输出:[4,2,7,1,3,5]解释:另一个满足题目要求可以通过的树是:示例 2:输入:root = [40,20,60,10
2022-04-27 14:21:51 320
原创 C++编程-二叉搜索树中的搜索-leetcode700
题目:给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。示例 1:输入:root = [4,2,7,1,3], val = 2输出:[2,1,3]示例 2:输入:root = [4,2,7,1,3], val = 5输出:[]代码1:/** * Definition for a binary tree node. * struct TreeNode
2022-04-27 14:08:00 911
原创 C++编程-路径总和-leetcode
题目:给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true解释:等于目标和的根节点到叶节点路径如上图所示。示例 2:输入
2022-04-27 13:39:30 375
原创 C++编程-翻转二叉树
题目:给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例 2:输入:root = [2,1,3]输出:[2,3,1]示例 3:输入:root = []输出:[]代码1:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *lef
2022-04-27 11:50:42 537
原创 C++编程-赎金信
题目:给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。示例 1:输入:ransomNote = “a”, magazine = “b”输出:false示例 2:输入:ransomNote = “aa”, magazine = “ab”输出:false示例 3:输入:ransomN
2022-04-26 17:04:08 554
原创 C++编程-杨辉三角
题目:给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: numRows = 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2:输入: numRows = 1输出: [[1]]代码:class Solution {public: vector<vector<int>> generate(int numRows
2022-04-26 14:50:45 1638
原创 C++编程-对称二叉树
题目:给你一个二叉树的根节点 root , 检查它是否轴对称。示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *
2022-04-26 14:25:28 1603
原创 C++编程-买卖股票的最佳时机
题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是
2022-04-26 10:59:12 926
原创 C++编程-数据结构-二叉树的层序遍历
题目:给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例 2:输入:root = [1]输出:[[1]]示例 3:输入:root = []输出:[]提示:树中节点数目在范围 [0, 2000] 内-1000 <= Node.val <= 1000代码:/** * Definition for a
2022-04-25 16:51:08 174
原创 C++编程-最大子数组和-数据结构
题目:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23提示:1 <= nums.length <= 105-104 <=
2022-04-25 14:50:52 1258
原创 C++编程-四数之和-组合求解
题目:给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。示例 1:输入:nums = [1,0
2022-04-25 12:51:12 325
原创 C++编程-电话号码的字母组合
题目:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]示例 2:输入:digits = “”输出:[]示例 3:输入:digits = “2”输出:[“a”,“b”,“c”]提示:0 <= digits.length <
2022-04-25 12:29:44 960
原创 C++编程-最接近的三数之和
题目:给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。示例 1:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。示例 2:输入:nums = [0,0,0], target = 1输出:0提示:3 <= nums.length <
2022-04-25 11:19:46 835
原创 C++编程-leetcode-三数之和-组合数求解
题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <= nums.length <= 3000-105
2022-04-25 10:55:57 1096
原创 C++编程-字符串转化整数(atoi)-leetcode
题目:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:1.读入字符串并丢弃无用的前导空格2.检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。3.读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。4。将前面步骤读入的这些数字转换为
2022-04-24 09:28:50 714
原创 C++编程-Z字形变换
题目:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入:s =
2022-04-23 16:23:37 585
原创 C++编程-只出现一次的数-位运算
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4这道题的解法还是挺有趣的。代码:class Solution {public: int singleNumber(vector<int>& nums) { int res=
2022-04-23 15:01:54 258
原创 C++编程-leetcode-颠倒二进制位-位运算
题目:颠倒给定的 32 位无符号整数的二进制位。示例 1:输入:n = 00000010100101000001111010011100输出:964176192 (00111001011110000010100101000000)解释:输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。示例 2:输入:n = 11
2022-04-23 14:39:58 180
原创 C++编程-位1的个数-位运算
题目:编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串 000000000000000000000000100
2022-04-23 14:17:58 512
原创 C++编程-打家劫舍-动态规划
题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2,7,
2022-04-23 12:45:20 396
原创 C++编程-字母大小写全排列-回溯算法
题目:给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。示例 1:输入:s = “a1b2”输出:[“a1b2”, “a1B2”, “A1b2”, “A1B2”]示例 2:输入: s = “3z4”输出: [“3z4”,“3Z4”]提示:1 <= s.length <= 12s 由小写英文字母、大写英文字母和数字组成思路:简单回溯算法:1.change函数:修改某一个字
2022-04-23 11:14:18 1712
原创 C++编程-leetcode-全排列-回溯算法
题目:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]提示:1 <= nums.length <= 6-10 <= nums[i] <= 1
2022-04-23 10:22:54 504
原创 C++编程-组合-回溯算法
题目:给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]示例 2:输入:n = 1, k = 1输出:[[1]]提示:1 <= n <= 201 <= k <= n思路:这道题的思想就在于枚举,这和输出所有可能是类似的,那么我们可以使用回溯算法来解决。具体流程如下
2022-04-22 17:09:26 733
原创 C++编程-图像渲染-广度优先搜索
题目:有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。你也被给予三个整数 sr , sc 和 newColor 。你应该从像素 image[sr][sc] 开始对图像进行 上色填充 。为了完成 上色工作 ,从初始像素开始,记录初始坐标的 上下左右四个方向上 像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应 四个方向上 像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改
2022-04-22 12:24:24 172
原创 C++编程-字符串的排列
题目:给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。换句话说,s1 的排列之一是 s2 的 子串 。示例 1:输入:s1 = “ab” s2 = “eidbaooo”输出:true解释:s2 包含 s1 的排列之一 (“ba”).示例 2:输入:s1= “ab” s2 = “eidboaoo”输出:false提示:1 <= s1.length, s2.length <= 104s1 和
2022-04-22 12:20:37 780
原创 C++编程-反转字符串中的单词
题目:给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例 1:输入:s = “Let’s take LeetCode contest”输出:“s’teL ekat edoCteeL tsetnoc”示例 2:输入: s = “God Ding”输出:“doG gniD”提示:1 <= s.length <= 5 * 104s 包含可打印的 ASCII 字符。s 不包含任何开头或结尾空格。s 里 至少 有一个词。s 中的所有单
2022-04-22 12:17:05 1141
原创 C++编程-腐烂的橘子-广度优先搜索
题目:在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。示例 1:输入:grid = [[2,1,1],[1,1,0],[0,1,1]]输出:4示例 2:输入:grid = [[2,1,1],[0,1,1],[1,0,1]]输出:-1解释:左下角
2022-04-22 12:12:40 382
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人