
随笔
shizheng163
一步一步向前走
展开
-
C++: Std::Thread Join时出现Resource deadlock avoided 问题分析
Std::Thread Join时出现Resource deadlock avoided 问题分析文章目录Std::Thread Join时出现Resource deadlock avoided 问题分析1.异常现象2.异常代码3.异常原因分析4.注意点5.疑问1.异常现象当使用std::thread对象的join函数时, C++程序抛出异常terminate called after t...原创 2020-03-03 02:06:02 · 10616 阅读 · 2 评论 -
希尔排序 计数排序,基数排序的实现
class ShellSort {public: int* shellSort(int* a, int n) { if(n<=1&&a==NULL) return a; else for (int div = n/2; div>=1; div/=2) {//步长每次减半 for原创 2016-03-16 17:24:41 · 325 阅读 · 0 评论 -
常见排序的时间复杂度和空间复杂度
原创 2016-03-16 19:23:09 · 385 阅读 · 0 评论 -
关于排序的几种练习.
传送门://http://www.nowcoder.com/courses/1/2/13题目描述已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。给定一个int数组A,同时给定A的大小n和题意中的k,请返回排序后的数组。测试样例:[2,1原创 2016-03-16 19:42:45 · 325 阅读 · 0 评论 -
三色排序(荷兰国旗问题)
题目描述:传送门:http://www.nowcoder.com/courses/1/2/17有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序。给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组。保证数组大小小于等于500。测试样例:[0,1,1,0,2,2],6返回:[0,0,1,1,2,2]时间复杂原创 2016-03-16 21:12:28 · 560 阅读 · 0 评论 -
有序矩阵查找练习题
传送门:http://www.nowcoder.com/courses/1/2/18题目描述现在有一个行和列都排好序的矩阵,请设计一个高效算法,快速查找矩阵中是否含有值x。给定一个int矩阵mat,同时给定矩阵大小nxm及待查找的数x,请返回一个bool值,代表矩阵中是否存在x。所有矩阵中数字及x均为int范围内整数。保证n和m均小于等于1000。测试样例:[[原创 2016-03-16 21:15:18 · 465 阅读 · 0 评论 -
最短子数组练习题
题目传送门:http://www.nowcoder.com/courses/1/2/19描述对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。测试样例:[1,4,6,5,9,10],6返回:2时原创 2016-03-16 21:25:56 · 377 阅读 · 0 评论 -
相邻两数最大差值练习题
题目传送门:http://www.nowcoder.com/courses/1/2/20描述有一个整形数组A,请设计一个复杂度为O(n)的算法,算出排序后相邻两数的最大差值。给定一个int数组A和A的大小n,请返回最大的差值。保证数组元素多于1个。测试样例:[1,2,5,4,6],5返回:2最优解思想来自桶排序,但并非桶排序算法,时间复杂度和空间复制度都原创 2016-03-16 23:10:32 · 610 阅读 · 0 评论 -
拓扑结构相同子树练习题
题目传送门://http://www.nowcoder.com/courses/1/3/2题目描述对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。时间复杂度为O(N+M);AC 代码struct TreeN原创 2016-03-17 16:03:03 · 975 阅读 · 0 评论 -
几种简单排序的实现
#include#include #include using namespace std;void print(int a[]){ for_each(a, a+10, [&](int a){ cout<<a<<" "; }); cout<<endl;}void maopao(){//冒泡排序 int a[10]={5, 7, 1, 3,原创 2016-03-15 17:12:56 · 325 阅读 · 0 评论 -
二分查找的简单实现.
数组必须有序且为线性结构.int findNum(int a[],int first,int last,int target){ if(first>=last) return -1; int mid = (last-first)/2+first; if(a[mid] == target) return mid; else{原创 2016-03-15 16:51:37 · 251 阅读 · 0 评论 -
56个民族的C++ map定义
56个民族的C++ map定义extern const std::map<int, std::string> megclient::c_mapPeopleNationString ={ { 1, "汉族" }, { 2, "蒙古族"}, { 3, "回族" }, { 4, "藏族" }, { 5, "维吾尔" }, { 6, "苗族"...原创 2019-07-01 16:18:21 · 612 阅读 · 1 评论 -
意外消息:ppsjy:[MyHookProc]__read web cfg: success ------ :
错误描述:ppsjy:[MyHookProc]__read web cfg: success ------ :出现场景:qtcreartor运行执行程序时控制台输出影响:未知程序启动时第一行代码打印了这句话:ppsjy:[MyHookProc]__read web cfg: success ------ :,笔者找遍所有代码都没找到这句话在哪打印的, 在网上搜索答案时发现有人说来自爱奇艺客户...原创 2019-01-12 22:28:08 · 1011 阅读 · 0 评论 -
条件变量之虚假唤醒
如有错误请及时指正!文章目录条件变量之虚假唤醒引言1.什么是虚假唤醒?2.什么情况下会发生虚假唤醒3.如何避免虚假唤醒条件变量之虚假唤醒引言当我们使用互斥量(Mutex)与条件变量(condition_variable)进行多线程同步时有可能会产生虚假唤醒现象, 那么究竟什么是虚假唤醒,它会在什么情况下被触发,什么情况下无需考虑虚假唤醒,如何避免?1.什么是虚假唤醒?Linux帮助...原创 2018-11-02 21:32:08 · 6971 阅读 · 6 评论 -
网络编程Demo, 下载文件。
将以前一篇Demo调整下格式客户端代码#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;#include&amp;lt;arpa/inet.h&amp;gt;#include&amp;lt;sys/types.h&amp;gt;#include&amp;lt;sys/socket原创 2018-10-30 17:28:52 · 328 阅读 · 0 评论 -
中缀表达式转后缀表达式
#include #include #include using namespace std;char * midToAfterNums(char *s);int main(){ char *s = "(((35+15)*(80-70))/20)"; s = midToAfterNums(s); cout<<s<<endl; return 0;}i原创 2015-12-12 13:37:34 · 377 阅读 · 0 评论 -
大数取余/求商
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。 输入描述:输入在1行中依次给出A和B,中间以1空格分隔。输出描述:在1行中依次输出Q和R,中间以1空格分隔。输入例子:123456789050987654321 7输出例子:17636684150141093474 3#include <iostream>...原创 2016-01-11 21:14:31 · 1387 阅读 · 0 评论 -
大数阶乘!
#include int main(){ int n; scanf("%d",&n); if(n<=2) printf("%d\n",n); else{ int ans[10000],digit = 1;//位数 ans[0]=1; for(int i=2;i<=n;++i){原创 2016-03-05 21:47:34 · 258 阅读 · 0 评论 -
判断出栈序列是否合理
给定一个进栈序列,给定一个有可能的出栈序列 判断该序列有没有可能出现.1.(如果栈为空或者栈顶的元素不等于出栈序列中要得到的元素)并且进栈的序列没有执行完并且出栈的序列也没有扫描完就进栈.2.如果满足以上的条件就判断栈顶元素是否相等,如果相等就弹出栈顶元素并且返回1,否则该序列没有可能出现.1 2 3 4 5 6 7//符合7 6 5 4 3 2 1//当栈容量大于等于7时 符合,否则不符合#in原创 2016-03-06 15:51:30 · 719 阅读 · 0 评论 -
字符串空格替换练习题
题目传送门:http://www.nowcoder.com/courses/1/3/10描述请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的stri原创 2016-03-17 17:15:46 · 410 阅读 · 0 评论 -
最长无重复字符子串练习题
传送门://http://www.nowcoder.com/courses/1/3/12描述对于一个字符串,请设计一个高效算法,找到字符串的最长无重复字符的子串长度。给定一个字符串A及它的长度n,请返回它的最长无重复字符子串长度。保证A中字符全部为小写英文字符,且长度小于等于500。测试样例:"aabcb",5返回:3AC代码class Dist原创 2016-03-17 18:11:39 · 622 阅读 · 0 评论 -
获取栈中最小值函数,时间复杂度为O(1)
class Solution {//方案一 节省空间但是费时间 stack stackData,stackMin;public: void push(int value) { if(stackData.empty()) { stackData.push(value); stackMin.push(va原创 2016-03-17 19:35:38 · 591 阅读 · 1 评论 -
大数相乘,结果在2000位以内
#include #include #include #include #include #include #include #include #include using namespace std;string num1,num2;int result[2048]={0};int main(){ cin>>num1>>num2; reverse(num原创 2016-03-25 22:33:07 · 338 阅读 · 0 评论 -
二叉树是否对称
定义二叉树对称的概念为 二叉树的镜像和原二叉树相同经过变换后 原二叉树的左子树变为右子树,左子树的左子树变为右子树的右子树,左子树的右子树变为右子树的左子树代码 struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left原创 2016-03-25 23:37:44 · 320 阅读 · 0 评论 -
堆排序(C++实现)
堆排序大根堆大根堆的定义为一个完全二叉树,且任意一个节点的值都大于它的任意一个左右孩子的值.大根堆代码实现#include <iostream>#include <cstring>#include <vector>#include <cstdio>#include <algorithm>#include <...原创 2016-03-31 20:49:51 · 1166 阅读 · 0 评论 -
图的俩种遍历方式(DFS,BFS)C++代码实现
DFS,BFS代码显示为输出连通集算法时间复杂度:采用邻接表存储图:DFS和BFS都为O(N+E)采用邻接矩阵存储:DFS和BFS都为O(N^2);数据结构设计/// @brief 顶点/// @param adjacencyList 邻接表struct vertex{ int id; vector<int> adjacencyLis...原创 2016-04-02 18:50:05 · 724 阅读 · 0 评论 -
位运算-不用加减乘除做加法。
位运算- 不用加减乘除做加法step1:按位与是查看两个数哪些二进制位都为1,这些都是进位位,结果需左移一位,表示进位后的结果step2:异或是查看两个数哪些二进制位只有一个为1,这些是非进位位,可以直接加、减,结果表示非进位位进行加操作后的结果step3:n1&n2是查看有没有进位位了,如果有,需要重复step1、step2;如果没有,保留n1、n2上二进制为1的部分,用或将之...原创 2016-04-08 23:34:44 · 377 阅读 · 0 评论 -
C++继承的三种方式(公有,私有,保护)
公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。1.公有继承(public)公有继承的特点是基类中的公有成员与保护成员在派生类中的属性仍保持原状态,即原来是公有成员(保护成员)在派生类中仍是公有成员(保护成员),在该派生类派生出去的子类中可见。而私有成员在派生类中则不可见,以后派生出去的子类中更是不可见。class A{ int a...原创 2016-10-07 17:59:33 · 962 阅读 · 0 评论 -
待修改:C++多线程编程学习笔记
头文件:#include<thread>创建线程 void show(int x){ cout<<"hello,world"<<x<<endl; thread t1(show,1);}另一种构造方式class Factor{ void operator()(string s){ cout<<...原创 2016-10-07 23:20:06 · 291 阅读 · 0 评论 -
冒泡、选择、插入、归并
时间复杂度O(n*n):冒泡:class BubbleSort {public: int* bubbleSort(int* A, int n) { for(int i=0;i<n-1;++i){ for (int j=0; j<n-i-1; ++j) { if(A[j]>A[j+1]) ...原创 2016-10-10 23:17:18 · 296 阅读 · 0 评论 -
前中后序遍历二叉树的非递归实现
struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};class TreeToSequence { vector preOrder(T原创 2016-03-20 11:32:58 · 290 阅读 · 0 评论 -
判断俩单链表是否相交
AC 代码 总的来说,单链表分为两种 无环单链表,有环单链表,判断单链表相交则可转化为 俩无环单链表是否相交,俩有环单链表是否相交,而一条有环一条无环一定不可能相交!class ChkIntersection { ListNode * findLoopNode(ListNode* head,int &len){//查找入环借点,若无环返回NULL;若无环即得到无环单链表长度原创 2016-03-19 15:59:17 · 413 阅读 · 0 评论 -
两个栈实现一个队列
class TwoStack { stackpushstack,popstack; void push(int value){ while (!popstack.empty()) { pushstack.push(popstack.top()); popstack.pop(); } pu原创 2016-03-17 20:30:03 · 235 阅读 · 0 评论 -
栈的反转
要求将栈中元素反转,只能使用本身的pop操作和递归函数class StackReverse { int getStackBottomElement(stack &s){//返回栈底元素并移除栈底元素 int x = s.top(); s.pop(); if(s.empty()) return x;原创 2016-03-17 20:59:10 · 573 阅读 · 0 评论 -
栈的排序,栈顶元素最大.
class TwoStacks {//要求只能申请一个辅助栈,不能使用额外的数据结构public: vector twoStacksSort(vector numbers) {//numbers为栈中元素序列,栈顶元素为numbers[0] stack s,help; for (int i=(int)numbers.size()-1; i>=0; --i)原创 2016-03-17 21:42:31 · 613 阅读 · 0 评论 -
队列的滑动窗口最大值练习题.
传送门://题目描述http://www.nowcoder.com/courses/1/4/8 购买视频请输入优惠码 AdVHxHT 可优惠10元有一个整型数组 arr 和一个大小为 w 的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大值。 以数组为[4,3,5,4,3,3,6,7],w=3原创 2016-03-18 17:45:47 · 755 阅读 · 0 评论 -
数组变树练习题
传送门:http://www.nowcoder.com/courses/1/4/9 购买视频请输入优惠码 AdVHxHT 可优惠10元题目描述 对于一个没有重复元素的整数数组,请用其中元素构造一棵MaxTree,MaxTree定义为一棵二叉树,其中的节点与数组元素一一对应,同时对于MaxTree的每棵子树,它的根的元素值为子树的最大值。现有一建树方法,对于数组中的每个元素,其在树原创 2016-03-18 18:28:06 · 444 阅读 · 0 评论 -
打印两个链表的公共值练习题
题目传送门:http://www.nowcoder.com/courses/1/5/6 购买视频请输入优惠码 AdVHxHT 可优惠10元现有两个升序链表,且链表中均无重复元素。请设计一个高效的算法,打印两个链表的公共值部分。给定两个链表的头指针headA和headB,请返回一个vector,元素为两个链表的公共部分。请保证返回数组的升序。两个链表的元素个数均小于等于500原创 2016-03-18 22:40:23 · 359 阅读 · 0 评论 -
链表逆序问题
传送门:http://www.nowcoder.com/courses/1/5/7 购买视频请输入优惠码 AdVHxHT 可优惠10元题目描述:有一个单链表,请设计一个算法,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点。例如链表1->2->3->4->5->6->7->8->null,K=3这个例子。调整后为,3->2->1->6->5-原创 2016-03-18 23:15:43 · 417 阅读 · 0 评论 -
链表所有为key的节点全部删除
class ClearValue {public: ListNode* clear(ListNode* head, int val) { ListNode * p=head,*previous = NULL,*nxt=NULL; while (head->val==val) { nxt = head->next;原创 2016-03-19 10:39:01 · 930 阅读 · 0 评论