自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (2)
  • 收藏
  • 关注

原创 子进程结束 SIGCHLD捕捉 Linux系统编程

循环回收循环创建10个子进程,并返回创建编号,回收子进程。注意,在捕捉回收函数中应该使用while循环回收;如果使用if,有可能在函数执行期间内,多个子进程死亡,但只会回收一个子进程。#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<sys/types.h>#include<signal.h>#include&

2020-09-30 16:45:20 126

原创 全局变量的异步IO Linux系统编程

分析时序竟态的宏观分析;父子进程循环计数;如果不加sleep,那么flag在失去cpu处会永远为0。#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<sys/types.h>#include<signal.h>int n=0,flag=0;void sys_err(char* str){ perr

2020-09-30 10:30:26 85

原创 C++ LeetCode 234 回文链表

请判断一个链表是否为回文链表。示例 1:输入: 1->2 输出: false示例 2:输入: 1->2->2->1 输出: true数组判断/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class S

2020-09-27 17:07:22 203

原创 C++ LeetCode 231 2的幂

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。示例 1:输入: 1 输出: true 解释: 20 = 1示例 2:输入: 16 输出: true 解释: 24 = 16示例 3:输入: 218 输出: false版本1class Solution {public: bool isPowerOfTwo(int n) { if(n<=0) return false; if(n==1)

2020-09-27 11:07:11 103

原创 C++ LeetCode 219 存在重复元素2

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。示例 1:输入: nums = [1,2,3,1], k = 3 输出: true示例 2:输入: nums = [1,0,1,1], k = 1 输出: true示例 3:输入: nums = [1,2,3,1,2,3], k = 2 输出: falsemap映射class Solution {public:

2020-09-25 17:40:24 78

原创 C++ LeetCode 226 翻转二叉树

翻转一棵二叉树。队列队列对每一层节点,交换左右节点。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: T

2020-09-25 17:11:00 113

原创 C++ LeetCode 217 存在重复元素

给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1] 输出: true示例 2:输入: [1,2,3,4] 输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2] 输出: trueset映射class Solution {public: bool containsDuplicate(vector<int>&amp

2020-09-25 11:25:19 83

原创 C++ LeetCode 206 反转链表 (迭代,递归实现)

反转一个单链表。示例:输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULLstack栈利用栈的后进先出特性。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL

2020-09-25 10:51:28 158 1

原创 C++ LeetCode 205 同构字符串

给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。示例 1:输入: s = “egg”, t = “add” 输出: true示例 2:输入: s = “foo”, t = “bar” 输出: false示例 3:输入: s = “paper”, t = “title” 输出: true标题class So

2020-09-25 09:40:51 302

原创 C++ LeetCode 204 计数质数

统计所有小于非负整数 n 的质数的数量。示例:输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。暴力法class Solution {public: bool prime(int n) { for(int i=2;i*i<=n;i++) { if(n%i==0) return false; } retu

2020-09-24 20:25:05 130

原创 C++ LeetCode 203 移除链表元素

删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5简单删除注意头结点的处理和节点回收。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) :

2020-09-23 10:24:06 124

原创 C++ LeetCode 202 快乐数

编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19 输出:true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02= 1Hashclass Solutio

2020-09-23 09:52:19 196

原创 C++ LeetCode 198 打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2,7,9,3

2020-09-22 21:52:47 135

原创 C++ LeetCode 189 旋转数组

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [-1,-100,3,99] 和 k = 2输出: [3,99,-1,-100]解释:向右旋转 1 步: [99,-1,-100,3]向右旋

2020-09-22 21:34:34 167

原创 求汉明重量 位运算

编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。简单版本class Solution {public: int hammingWeight(uint32_t n) { int ans=0; while(n!=0) { if(n & 1) ans++; n=n>>1;

2020-09-22 21:18:04 520

原创 C++ LeetCode 190颠倒二进制

颠倒给定的 32 位无符号整数的二进制位。示例 1:输入: 00000010100101000001111010011100输出: 00111001011110000010100101000000解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。示例 2:输入:11111111111111111111111

2020-09-22 21:13:32 201

原创 C++ LeetCode 172 阶乘后的零

给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) 。数学思想因为0都是5和偶数相乘产生的,所以要找出因子中有多少个5,因为25,125,625…含有多个5,要加上这些额外的5,即res=n/5+n/25+n/125+n/625…举个栗子:计算130,(1)130/5=26,说明有26个包

2020-09-22 10:58:54 103

原创 寻找一个数组中多数(众数) Boyer-Moore 投票算法

Boyer-Moore 投票算法(1)字面理解就是候选人是众数,所以给他投票的人是最多的,赞成票肯定大于反对票,最终众数胜出。(2)投票算法个人思路,数组中众数和其他数分成几队人在一个擂台上打架,每次擂台随机上一队的人,如果擂台没人则留在擂台上当擂主等待挑战者;如果是同队则一起留在擂台上;如果不是一队的人,就干一架,因为打的比较狠,挑战者和擂台上一个人一起被抬下去;最后,因为众数人多,所以最后站在擂台上的擂主一定是众数队,众数,永远滴神!同时可以发现其他队不懂团结,他们的内斗消耗更有利于众数获

2020-09-22 08:58:29 275

原创 C++ LeetCode 169 多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2mapclass Solution {public: int majorityElement(vector<int>& nums) { map<int,int> mp;

2020-09-22 08:57:44 195

原创 C++ LeetCode 171 EXCEL表列序号

给定一个Excel表格中的列名称,返回其相应的列序号。例如,A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28 ...示例 1:输入: “A”输出: 1示例 2:输入: “AB”输出: 28示例 3:输入: “ZY”输出: 701其实就是26进制转10进制class Solution {public: int titleToNumber(string s) { int

2020-09-21 14:53:02 175

原创 C++ LeetCode 168 EXCEL表名称

给定一个正整数,返回它在 Excel 表中相对应的列名称。例如,1 -> A2 -> B3 -> C...26 -> Z27 -> AA28 -> AB ...示例 1:输入: 1输出: “A”示例 2:输入: 28输出: “AB”示例 3:输入: 701输出: “ZY”代码处理好边界条件,n-=1;class Solution {public: string convertToTitle(int n) {

2020-09-16 21:28:12 87

原创 C++ LeetCode 167 两数之和2 输入有序数组

给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, ind

2020-09-16 20:33:27 52

原创 求相交链表,两个指针的爱情

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {

2020-09-15 22:05:57 92

原创 C++ LeetCode 160 相交链表

编写一个程序,找到两个单链表相交的起始节点。暴力遍历/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *getIntersectionNode(ListNode

2020-09-15 22:03:24 93

原创 C++ LeetCode 155 最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。pair用法stack栈内同时保存class MinStack {public: /** initialize your data structure here. */ MinStack() { }

2020-09-15 19:12:41 158

原创 C++ LeetCode 141 环型链表

给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。哈希表简单的集合遍历查找,但费时费空间。/** * Definition for singly-linked list. * struct ListNode { * int

2020-09-15 17:13:57 96

原创 C++ LeetCode 136 只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4集合(set)利用集合set不会存相同数字的特性class Solution {public: int singleNumber(vector<int>& nums) { set&

2020-09-14 18:06:21 52

原创 C++ LeetCode 125 验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false简单版本class Solution {public: bool isPalindrome(string s) { string temp; for(int i=0;

2020-09-14 17:02:07 139

原创 C++ LeetCode 122 买卖股票的最佳时2

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6

2020-09-14 15:29:32 115

原创 C++ LeetCode 121买卖股票的最佳时机

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例 2:输入: [7

2020-09-14 15:14:10 63

原创 C++ LeetCode 119 杨辉三角 II

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。版本1class Solution {public: vector<int> getRow(int rowIndex) { vector<int> vec_pre; for(int i=1;i<=rowIndex+1;++i) { vector<int> vec_curr; for(int

2020-09-11 15:35:40 118

原创 C++ LeetCode 118 杨辉三角

版本1class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> vec; vector<int> vec1; vec1.push_back(1); for(int i=1;i<=numRows;i++) { ve

2020-09-11 11:18:51 57

原创 C++ LeetCode 112 路径总和

给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。BFS逐层向下查找,队列保存每个节点及到此节点路径长度。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : v

2020-09-11 09:33:37 113

原创 C++ LeetCode 111 二叉树的最小深度

题目给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。版本1,BFSBFS广度优先搜索,利用队列queue实现,遍历每一层的节点,每次向下拓展ans++,当拓展到某个节点没有子节点时,说明找到最短路径,退出两个while循环返回ans。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode

2020-09-10 12:42:18 236

原创 C++ LeetCode 110平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。版本1sol函数来计算给定节点的高度,然后在isBalanced函数中递归调用,判断每个节点的子节点之间的高度差是否大于1。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *

2020-09-09 21:25:32 175

原创 时序竟态条件分析 sigsuspend函数 Linu系统编程

简单的自定义sleep函数#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<sys/types.h>#include<signal.h>#include<errno.h>void cat_sig(int sig){ ;}unsigned int mysleep(unsigned int s

2020-09-09 20:48:22 190

原创 C++ LeetCode 108 有序数组转化为二叉搜索树

版本1/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* sortedArrayToBST(

2020-09-08 21:36:30 69

原创 信号的捕捉 signal函数(sigaction) Linux系统编程

捕捉定时信号#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<sys/types.h>#include<sys/time.h>#include<signal.h>void myfunc(int signo){ printf("hello world!\n");}int main(){

2020-09-08 19:57:58 383

原创 信号屏蔽 sig函数族(sigaddset,sigemptyset等)用法 Linux系统编程

屏蔽系统信号程序执行后,会循环打印未决信号集000----0000(32位),如果有相应信号输入,如ctrl+c,因为SIGINT被屏蔽,未决信号集中对应3号位置一直置为1(信号被屏蔽,无法被处理,处于未决状态),打印变为001-----0000(32),其他信号类似。#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<sys/types

2020-09-08 16:46:30 1345

原创 定时 alarm函数简单用法 Linux系统编程

alarm定时1s内计数的值通过屏幕输出#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<sys/types.h>int main(){ int i; alarm(1); //自然定时1s后进程自动退出 for(i=0;;i++) { printf("%d\n",i);

2020-09-08 14:32:07 234

蓝桥杯 基础+算法训练代码(C语言)

自己写的和网上找的一些代码,都通过了蓝桥杯官网训练库100%。个人觉得多做题,然后掌握C++几个STL容器的用法,拿奖是没有问题的。

2020-11-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除