C/C++
文章平均质量分 92
关于C/C++的一些用法,心得!
aW5jaXBl
The story has just begun!
展开
-
master method(主定理)
master method(主定理)假设有递推关系式 T(n)=aT(nb)+f(n)T(n) = aT(\frac{n}{b}) + f(n)T(n)=aT(bn)+f(n) ,其中 nnn 为问题的规模,aaa 为递推的子问题数量,nb\frac{n}{b}bn 为每个子问题的规模(假设每个子问题的基本规模基本一样),f(n)f(n)f(n) 为递推以外进行的计算工作。a≥1,b>1a \geq 1, b > 1a≥1,b>1 为常数,f(n)f(n)f(n) 为函数,T(n)原创 2021-09-18 18:17:03 · 2459 阅读 · 0 评论 -
Autotools工具使用
1. 工具介绍Autoconf/Automake 工具用于自动创建功能完善的 Makefile 文件。Autotools 主要包括:autoconf、automake、perl 语言环境和 m4。2. 使用示范目录树:tree.|-- login.c|-- login.h|-- main.c|-- welecome.c`-- welecome.h0 directories, 5 filesⅠ. 使用autoscan生成configure.scan文件autoscantree原创 2020-11-25 19:06:55 · 809 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
原题数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000思路因为题目给定了数组总是存在多数元素,所以这题利用 摩尔投票法 即可解决。首先给个暴力的解法:暴力C++class Solution {public: int majorityElement(vect原创 2020-11-02 10:59:35 · 159 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
原题请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1/ \2 2/ \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1/ \2 2\ \3 3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/dui-cheng-de-er-cha-sh原创 2020-10-27 09:07:42 · 108 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)原创 2020-10-27 08:37:39 · 96 阅读 · 0 评论 -
978. 最长湍流子数组
原题当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]。也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。返回 A 的最大原创 2020-10-26 20:58:12 · 87 阅读 · 0 评论 -
56. 合并区间
原题给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: intervals = [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。注意:输入类型已于2019年4月15日更改。 请重置默认代码原创 2020-10-22 22:35:10 · 76 阅读 · 0 评论 -
763. 划分字母区间
原题字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例 1:输入:S = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “ababcbaca”, “defegde”, “hijhklij”。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。来源:力扣(LeetCo原创 2020-10-22 20:35:49 · 135 阅读 · 0 评论 -
Morris遍历
Morris遍历通常,二叉树的前、中、后序遍历有两种方法。使用递归,时间复杂度 O(N)O(N)O(N) 空间复杂度 O(N)O(N)O(N)使用栈(stack) ,时间复杂度 O(N)O(N)O(N) 空间复杂度 O(N)O(N)O(N)其中 NNN 代表节点数。但是 Morris 遍历可以做到在 O(N)O(N)O(N) 时间 O(1)O(1)O(1) 空间对整个二叉树进行遍历。Morris遍历流程记录当前节点为 root如果当前节点没有左孩子,root = root->ri原创 2020-10-18 14:37:18 · 169 阅读 · 0 评论 -
素数筛法
一般我们判断某个数是不是素数,都是直接循环遍历,进行判断。这样子的时间复杂度为O(n*logn)代码如下#include <cmath>#include <iostream>bool IsPrime(int n) { int k = sqrt(n); for (int i = 2; i <= k; i++) { if (n % i == 0...原创 2019-09-03 17:17:06 · 128 阅读 · 0 评论 -
LCP 12. 小张刷题计划
原题为了提高自己的代码能力,小张制定了 LeetCode 刷题计划,他选中了 LeetCode 题库中的 n 道题,编号从 0 到 n-1,并计划在 m 天内按照题目编号顺序刷完所有的题目(注意,小张不能用多天完成同一题)。在小张刷题计划中,小张需要用 time[i] 的时间完成编号 i 的题目。此外,小张还可以使用场外求助功能,通过询问他的好朋友小杨题目的解法,可以省去该题的做题时间。为了防止“小张刷题计划”变成“小杨刷题计划”,小张每天最多使用一次求助。我们定义 m 天中做题时间最多的一天耗原创 2020-10-02 21:58:57 · 1239 阅读 · 1 评论 -
GEC6818音乐播放器制作
环境# linux操作系统uname -aLinux incipe-virtual-machine 5.4.0-31-generic #35-Ubuntu SMP Thu May 7 20:20:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux# 交叉编译器arm-linux-gcc -vUsing built-in specs.Target: arm-none-linux-gnueabiConfigured with: /opt/FriendlyARM原创 2020-09-28 23:15:11 · 11963 阅读 · 11 评论 -
Ubuntu20.04安装arm-linux-gcc4.4.3交叉编译器
下载本文安装的交叉编译器是 arm-linux-gcc4.4.3 32位的,其他版本安装类似。友善之臂官网下载地址 :http://www.arm9.net/download.asp喜欢网盘下载的朋友可以使用 [https://pan.baidu.com/s/1bSNel0a13lJsn9fxOT7gZQ 提取码: u3yd] 进行安装。安装如果之前安装过旧版本的,可以考虑删除旧的版本在进行安装,如果不知道有没有安装过,就不管了。下载好后进入 Ubuntu20.04 进行解压。tar -zx原创 2020-09-28 21:58:50 · 6507 阅读 · 3 评论 -
Leetcode刷题笔记147. 对链表进行插入排序
原题对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。示例 1:输入: 4->2->1->3输出: 1-原创 2020-09-24 20:15:56 · 138 阅读 · 1 评论 -
PAT1011
原题With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excited as the best players from the best teams doing battles for the World Cup trophy in South Africa. Similarly, football betting fans were putting their mo原创 2020-08-16 20:58:59 · 175 阅读 · 0 评论 -
PAT1009
原题This time, you are supposed to find A×B where A and B are two polynomials.Input Specification:Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:K N1 a**N1 N2 a**N2 … N**K aNKw原创 2020-08-12 22:25:09 · 93 阅读 · 0 评论 -
PAT1008
原题The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will stop, in specified order. It costs 6 seconds to move the elevator up one floor, and 4 second原创 2020-08-10 18:49:33 · 100 阅读 · 0 评论 -
PAT1007
原题Given a sequence of K integers { N1, N2, …, N**K }. A continuous subsequence is defined to be { N**i, N**i+1, …, N**j } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, given s原创 2020-08-10 15:28:28 · 108 阅读 · 0 评论 -
PAT1006
原题At the beginning of every day, the first person who signs in the computer room will unlock the door, and the last one who signs out will lock the door. Given the records of signing in’s and out’s, you are supposed to find the ones who have unlocked and原创 2020-08-10 11:18:34 · 104 阅读 · 0 评论 -
PAT1004
title: PAT1004date: 2020-08-04categories:博客tags:PATmathjax:presets: ‘\def\lr#1#2#3{\left#1#2\right#3}’原题A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.Input Specificati.原创 2020-08-07 21:09:33 · 110 阅读 · 0 评论 -
PAT1003 迪杰斯特拉(Dijkstra)
算法简介迪杰斯特拉(Dijkstra)是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。讲白了,就是给你一张有很多城市的地图,要你求指定两个城市之间的最小距离。基本思想给定一个上述图,要求某两个点之间的最短路径,这就叫做 有权图单源最短路 。如果是要求任意两个点之间的最短路径,这就是 有权图无源最短路径 ,无源最短路径用 Dijkstra 的时间复杂度原创 2020-08-07 11:59:11 · 248 阅读 · 0 评论 -
PAT1005
原题Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English.Input Specification:Each input file contains one test case. Each case occupies one line which contains an N (≤10^100)原创 2020-08-05 16:49:20 · 97 阅读 · 0 评论 -
PAT1001
原题Calculate a+b and output the sum in standard format – that is, the digits must be separated into groups of three by commas (unless there are less than four digits).Input Specification:Each input file contains one test case. Each case contains a pair原创 2020-08-02 22:10:56 · 107 阅读 · 0 评论 -
PAT1002
原题This time, you are supposed to find A+B where A and B are two polynomials.Input Specification:Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:K N1 aN1 N2 aN2 … NK aNKwhere K原创 2020-08-02 22:09:34 · 135 阅读 · 0 评论 -
那些好用的位运算奇技淫巧
本文主要讲使用位运算的一些技巧。位运算位运算符号符号c/cpppython含义按位与a & ba & b1 & 1 = 1, 1 & 0 = 0, 同 1 为 1, 有 0 为 0按位或a | ba | b1 | 1 = 1, 1 | 0 = 1, 有 1 为 1, 同 0 为 0按位异或a ^ ba ^ b1 ^ 1 = 0, 1 ^ 0 = 1, 相同位不同为 1, 相同为 0按位取反~a~b~1 =原创 2020-07-30 19:32:16 · 213 阅读 · 0 评论 -
Linux线程
一. 线程pthread不是linux下默认的库,有可能需要安装。sudo apt-get install glibc-docsudo apt-get install manpages-posix-dev通过man pthread_creat查看man pages中关于pthread的手册。#include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*star原创 2020-06-23 15:45:41 · 676 阅读 · 0 评论 -
Linux进程(下)
一. 信号Ⅰ. 信号的基本概念信号信号产生按键产生,Ctrl + c、Ctrl + z;调用函数,kill、raise、abort;定时器,alarm、setitimer;命令产生,kill;硬件异常,段错误,浮点型错误,总线错误,SIGPIPE。linux 查看信号种类man 7 signalⅡ. kill 函数man 2 kill#include <sys/types.h>#include <signal.h>int kill(pid_t pid,原创 2020-06-21 22:30:48 · 275 阅读 · 0 评论 -
剑指offer系列12. 矩阵中的路径
原题请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行原创 2020-06-03 08:16:37 · 225 阅读 · 0 评论 -
剑指offer系列11. 旋转数组的最小数字
原题把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为 1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-sh原创 2020-06-01 14:48:37 · 142 阅读 · 0 评论 -
剑指offer系列10- II. 青蛙跳台阶问题
原题一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21提示:0 <= n <= 100来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti原创 2020-05-31 10:28:53 · 300 阅读 · 0 评论 -
剑指offer系列10- I. 斐波那契数列
原题写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出:5来源:力原创 2020-05-30 10:48:13 · 441 阅读 · 0 评论 -
剑指offer系列09. 用两个栈实现队列
原题用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“appendTa原创 2020-05-29 10:14:30 · 197 阅读 · 0 评论 -
剑指offer系列07. 重建二叉树
原题输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:限制:0 <= 节点个数 <= 5000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/思路Ⅰ. 先原创 2020-05-28 13:37:29 · 142 阅读 · 0 评论 -
剑指offer系列06. 从尾到头打印链表
原题输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/思路Ⅰ. 反转链表得到反转后的链表,遍历链表即可。C++代码/** * Definition f原创 2020-05-27 16:13:48 · 160 阅读 · 0 评论 -
剑指offer系列05.替换空格
原题请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/思路这个题感觉就十分简单了,但是,我竟然会想到按照空格拆分字符串再重新拼装,钻洞中????c++代码class原创 2020-05-26 12:40:11 · 220 阅读 · 0 评论 -
剑指offer系列04. 二维数组中的查找
原题在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定原创 2020-05-25 11:32:14 · 223 阅读 · 0 评论 -
剑指offer系列03. 数组中重复的数字
原题找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-原创 2020-05-24 20:48:39 · 157 阅读 · 0 评论 -
你会linux系统API吗?
讲在前面的话本文主要介绍几个主要的 linux 系统 API。注:本文讲的简单,每个 API 举了一个例子,不适合深入学习,只适合忘记了某个函数来回顾下用法。系统API 和 C语言库函数 区别:简单的讲: C库函数 是由 API 封装而来的。每个系统的 API 都不一样,但是 C库函数 一样,库函数更具移植性。errno 错误报告下文很多函数返回失败都要设置 errno ,这里解释明白。更详细的可到 linux 这三个头文件查看。/usr/include/asm-generic/errno-原创 2020-05-13 21:20:20 · 861 阅读 · 0 评论 -
简简单单学会写makefile
一. 题外话1.1 c/cc编译流程以 main.cpp 为例:1.2 gcc编译参数( 部分)除了前面的 -E -S -c 以外-o 指定输出的文件名;-Wall 启用所有警告;-w 不产生任何警告;-g 生成调试信息;-I 指定头文件路径;-l 链接共享库,小写的 l ;-L 指定库文件路径,大写的 L ;-D 定义编译时的宏;-Werror 将所有的警告转换成错...原创 2020-05-07 15:36:54 · 882 阅读 · 0 评论 -
利用masm工具和DOCBOX在win10上进行汇编
windows XP直接用cmd就可以了,win10用户也可也在虚拟机上装个XP进行汇编!接下来介绍利用masm工具和DOCBOX在win10上进行汇编1.DOCBOX下载地址MASM32下载地址官网网盘地址链接:https://pan.baidu.com/s/172uIe8oT28-r27I93KbKxA提取码:ugyp2.安装DOCBOX1)运行,一路next即可。2)在另...原创 2019-09-18 18:57:58 · 602 阅读 · 0 评论