- 博客(53)
- 资源 (5)
- 收藏
- 关注
原创 vs编译出现 0xC0000005
通常说是出现了问题,比如打开文件,文件没打开,却用对应的文件句柄开始访问所以还是代码有问题,需要注意是否越界,指针是否为空等gdb vs调试一大把工具可以用另0xcdcdcdcd通常是堆上分配空间未初始化0xcccccccc是栈上分配空间未初始化0xfdfdfdfd是堆内存边界0xdddddddd为堆上释放的地址...
2020-11-18 11:47:49
2165
原创 面试题 08.06. 汉诺塔问题
在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。你需要原地修改栈。示例1: 输入:A = [2, 1, 0], B = [], C = [] 输出:C = [2,
2020-06-12 18:32:25
289
原创 面试题 03.04. 化栈为队
实现一个MyQueue类,该类用两个栈来实现一个队列。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false说明:你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size 和 is empty...
2020-06-08 20:49:36
209
原创 面试题 01.07. 旋转矩阵
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]示例 2:给定 matrix =[ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6.
2020-06-08 20:19:49
207
原创 c++多线程, lock/try_lock/once_flag/ call_once
std::locktemplate<class Mutex1, class Mutex2, class ... Mutexes> void lock(Mutex1& a, Mutex2& b, Mutexes&... cde);锁定作为参数传进来的对象,如果有必要调用线程进行阻塞;std::lock通过使用lock、try_lock、unlock来锁定对象,返回之前确保所有的对象都上锁,并且没有产生死锁如果不能锁定所有对象,在失败之前会前之前成功...
2020-06-02 21:24:44
646
原创 c++多线程,adopt_lock_t/defer_lock_t/try_to_lock_t
std::adopt_lock_tstruct adopt_lock_t {};constexpr adopt_lock_t adopt_lock {};是一个空类,作为adopt_lock类型对unique_lock or lock_guard的建造含糊,将adopt_lock作为参数传递,使object不要锁互斥量,并且假定互斥量已经被当前线程锁住std::defer_lock_tstruct defer_lock_t {};是一个空类,used as the type
2020-05-31 22:56:21
2520
原创 c++多线程,unique_lock
template<class Mutex> class unique_lock;unique_lock不管时锁定还是非锁定状态,unique_lock对互斥量有唯一ownership;在构建或通过移动构造,unique lock获得互斥量,并对该互斥量的lock/unlock负责;该类保证在销毁时处于解锁状态,因此对于有自动持续时间的对象特别有用,因为它可以确保在抛出异常情况下,互斥对象已正确解锁;mutex_type* mutex() const noexcept;返回
2020-05-31 22:25:57
236
原创 c++多线程,lock_guard
template<class Mutex> class lock_guard;lock_guard是一个一直使互斥量锁定的管理锁对象;在构建阶段,互斥量被调用线程锁定,在析构阶段,锁unlockedlock_guard是最简单的锁,对具有自动持续时间的对象特别有用,该i持续时间能一直持续到上下文结束; #include <iostream> #include <mutex> #include <thread> #include.
2020-05-31 18:05:52
237
原创 c++多线程,timed_mutex
timed_mutexconstructorconstexpr timed_mutex() no_exception; //object unlock statetimed_mutex(const timed_mutex&) = delete; //不能拷贝或移动拷贝构建过程不是原子操作,所以在构建过程可能会出现data race;void lock(); void unlock(); bool try_lock();和mutex的lock/unlock/tyr_lock同;
2020-05-31 17:44:32
350
原创 c++多线程,mutex/recursive_mutex锁
对于mutex使用锁有三种情况,1、任何线程都没有使用mutex, 则调用的线程使用mutex2、有其他线程使用mutex,当前调用的线程会阻塞,直到其他使用锁的线程锁释放3、如果mutex被同一线程调用,会产生死锁;如果发生死锁, 会出现无定义行为,在某些特定库实现中,死锁会导致函数调用失败;如果调用失败,会产生一个system_error产生错误的条件有errc::resource_deadlock_world_occur,errc::operation_not_p.
2020-05-31 10:34:47
1861
原创 c++ valotile关键字
对于常量和指针类型如:valotile int a = 0;valotile* char ch = NULL;作用是告诉编译器,不要对我进行优化,如果涉及到我情况,如读取整型a或者指针ch,需要在我的保存地址中进行存取;对于多线程情况下,对某些互斥量,如count可能会被两个线程使用,此时使用valotile int count,可避免读取到错误数据...
2020-05-31 10:13:00
806
原创 535. TinyURL 的加密与解密
TinyURL是一种URL简化服务, 比如:当你输入一个URLhttps://leetcode.com/problems/design-tinyurl时,它将返回一个简化的URLhttp://tinyurl.com/4e9iAk.要求:设计一个 TinyURL 的加密encode和解密decode的方法。你的加密和解密算法如何设计和运作是没有限制的,你只需要保证一个URL可以被加密成一个TinyURL,并且这个TinyURL可以用解密方法恢复成原本的URL。class Solutio...
2020-05-25 22:16:17
298
原创 1395. 统计作战单位数
n 名士兵站成一排。每个士兵都有一个 独一无二 的评分 rating 。每 3 个士兵可以组成一个作战单位,分组规则如下:从队伍中选出下标分别为 i、j、k 的 3 名士兵,他们的评分分别为 rating[i]、rating[j]、rating[k] 作战单位需满足: rating[i] < rating[j] < rating[k] 或者 rating[i] > rating[j] > rating[k] ,其中 0<= i <j <k <...
2020-05-25 21:40:11
112
原创 468. 验证IP地址
编写一个函数来验证输入的字符串是否是有效的 IPv4 或IPv6 地址。IPv4地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为0 -255,用(".")分割。比如,172.16.254.1;同时,IPv4 地址内的数不会以 0 开头。比如,地址172.16.254.01 是不合法的。IPv6地址由8组16进制的数字来表示,每组表示16 比特。这些组数字通过 (":")分割。比如,2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一...
2020-05-22 22:22:35
144
原创 8. 字符串转换整数 (atoi)
请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。 该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有..
2020-05-22 20:58:31
134
原创 2. 两数相加
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807/** * Definition for singl...
2020-05-22 17:35:32
116
原创 3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"是一个...
2020-05-22 17:20:32
99
原创 1413. 逐步求和得到正数的最小值
给你一个整数数组 nums。你可以选定任意的正数 startValue 作为初始值。你需要从左到右遍历 nums数组,并将 startValue 依次累加上nums数组中的值。请你在确保累加和始终大于等于 1 的前提下,选出一个最小的正数作为 startValue 。示例 1:输入:nums = [-3,2,-3,4,2]输出:5解释:如果你选择 startValue = 4,在第三次累加时,和小于 1 。 累加求和 ...
2020-05-20 15:12:30
218
原创 1441. 用栈操作构建数组
给你一个目标数组 target 和一个整数 n。每次迭代,需要从 list = {1,2,3..., n} 中依序读取一个数字。请使用下述操作来构建目标数组 target :Push:从 list 中读取一个新元素, 并将其推入数组中。 Pop:删除数组中的最后一个元素。 如果目标数组构建完成,就停止读取更多元素。题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。请返回构建目标数组所用的操作序列。题目数据保证答案是唯一的。示例 1:输入:target ..
2020-05-19 22:11:47
213
转载 1403. 非递增顺序的最小子序列
给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。如果存在多个解决方案,只需返回 长度最小 的子序列。如果仍然有多个解决方案,则返回 元素之和最大 的子序列。与子数组不同的地方在于,「数组的子序列」不强调元素在原数组中的连续性,也就是说,它可以通过从数组中分离一些(也可能不分离)元素得到。注意,题目数据保证满足所有约束条件的解决方案是 唯一 的。同时,返回的答案应当按 非递增顺序 排列。示例 1:输入:nums = .
2020-05-19 18:24:00
145
原创 605. 种花问题
假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数n。能否在不打破种植规则的情况下种入n朵花?能则返回True,不能则返回False。示例 1:输入: flowerbed = [1,0,0,0,1], n = 1输出: True示例 2:输入: flowerbed = [1,0,0,0,1], n = 2输出: ...
2020-05-17 18:30:57
201
原创 840. 矩阵中的幻方
3 x 3 的幻方是一个填充有从 1 到 9的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。给定一个由整数组成的grid,其中有多少个 3 × 3 的 “幻方” 子矩阵?(每个子矩阵都是连续的)。示例:输入: [[4,3,8,4], [9,5,1,9], [2,7,6,2]]输出: 1解释: 下面的子矩阵是一个 3 x 3 的幻方:438951276而这一个不是:384519762总的来说,在本示例所给...
2020-05-16 16:52:50
192
原创 949. 给定数字能组成的最大时间
给定一个由 4 位数字组成的数组,返回可以设置的符合 24 小时制的最大时间。最小的 24 小时制时间是00:00,而最大的是23:59。从 00:00 (午夜)开始算起,过得越久,时间越大。以长度为 5 的字符串返回答案。如果不能确定有效时间,则返回空字符串。示例 1:输入:[1,2,3,4]输出:"23:41"示例 2:输入:[5,5,5,5]输出:""提示:A.length == 4 0 <= A[i] <= 9cla...
2020-05-16 10:10:21
478
原创 680. 验证回文字符串 Ⅱ
给定一个非空字符串s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。class Solution {public: bool validPalindrome(string s) { if (s.size() < 3) { ..
2020-05-15 18:39:42
176
原创 482. 密钥格式化
有一个密钥字符串 S ,只包含字母,数字以及 '-'(破折号)。其中, N 个 '-' 将字符串分成了 N+1 组。给你一个数字 K,请你重新格式化字符串,除了第一个分组以外,每个分组要包含 K 个字符;而第一个分组中,至少要包含 1 个字符。两个分组之间需要用 '-'(破折号)隔开,并且将所有的小写字母转换为大写字母。给定非空字符串 S 和数字 K,按照上面描述的规则进行格式化。示例 1:输入:S = "5F3Z-2e-9-w", K = 4输出:"5F3Z-2E9W"解释:字.
2020-05-12 21:37:50
282
原创 970. 强整数, leetcode
给定两个正整数x和y,如果某一整数等于x^i + y^j,其中整数i >= 0且j >= 0,那么我们认为该整数是一个强整数。返回值小于或等于bound的所有强整数组成的列表。你可以按任何顺序返回答案。在你的回答中,每个值最多出现一次。示例 1:输入:x = 2, y = 3, bound = 10输出:[2,3,4,5,7,9,10]解释: 2 = 2^0 + 3^03 = 2^1 + 3^04 = 2^0 + 3^15 = 2^1 + 3...
2020-05-12 19:42:44
712
原创 819. 最常见的单词
给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,而且答案唯一。禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。示例:输入: paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."banned = ["hit"]输出: "ball"解释: "h..
2020-05-12 18:20:39
131
原创 443. 压缩字符串
给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。进阶:你能否仅使用O(1) 空间解决问题?示例 1:输入:["a","a","b","b","c","c","c"]输出:返回6,输入数组的前6个字符应该是:["a","2","b","2","c","3"]说明:"aa"被"a2"替代。"bb"被"b2"替代。"ccc"...
2020-05-12 15:59:20
94
原创 信号量 signal/raise
信号定义:signalvoid (*signal(int sig, void (*func)(int)))(int);Set function to handle signalSpecifies a way to handle the signals with thesignal numberspecified bysig.Parameterfuncspecifies one of the three ways in which a signal can be handled ...
2020-05-12 10:00:43
516
原创 1346. 检查整数及其两倍数是否存在
给你一个整数数组arr,请你检查是否存在两个整数N和M,满足N是M的两倍(即,N = 2 * M)。更正式地,检查是否存在两个下标i和j满足:i != j 0 <= i, j < arr.length arr[i] == 2 * arr[j]示例 1:输入:arr = [10,2,5,3]输出:true解释:N = 10 是 M = 5 的两倍,即 10 = 2 * 5 。示例 2:输入:arr = [7,1,14,11]输出:...
2020-05-11 21:16:02
171
原创 290. 单词规律
给定一种规律pattern和一个字符串str,判断str是否遵循相同的规律。这里的遵循指完全匹配,例如,pattern里的每个字母和字符串str中的每个非空单词之间存在着双向连接的对应规律。示例1:输入: pattern = "abba", str = "dog cat cat dog"输出: true示例 2:输入:pattern = "abba", str = "dog cat cat fish"输出: false示例 3:输入: patt...
2020-05-11 20:54:52
144
原创 1010. 总持续时间可被 60 整除的歌曲, leetcode
在歌曲列表中,第i首歌曲的持续时间为time[i]秒。返回其总持续时间(以秒为单位)可被60整除的歌曲对的数量。形式上,我们希望索引的数字i和j满足i < j且有(time[i] + time[j]) % 60 == 0。示例 1:输入:[30,20,150,100,40]输出:3解释:这三对的总持续时间可被 60 整数:(time[0] = 30, time[2] = 150): 总持续时间 180(time[1] = 20, time[3]...
2020-05-11 17:32:39
103
原创 367. 有效的完全平方数
给定一个正整数num,编写一个函数,如果num是一个完全平方数,则返回 True,否则返回 False。说明:不要使用任何内置的库函数,如sqrt。示例 1:输入:16输出:True示例 2:输入:14输出:False关键是大数的处理mid * mid 可能会溢出,所以需要num / mid && mid * mid == num来判断是否是平方数class Solution {public: bool isPerfectSqu...
2020-05-11 17:23:08
164
原创 989. 数组形式的整数加法
对于非负整数X而言,X的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果X = 1231,那么其数组形式为[1,2,3,1]。给定非负整数X的数组形式A,返回整数X+K的数组形式。示例 1:输入:A = [1,2,0,0], K = 34输出:[1,2,3,4]解释:1200 + 34 = 1234示例 2:输入:A = [2,7,4], K = 181输出:[4,5,5]解释:274 + 181 = 455示例 3:输入:A ...
2020-05-11 16:57:05
153
原创 35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/se...
2020-05-10 21:42:52
64
原创 599. 两个列表的最小索引总和
假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设总是存在一个答案。示例 1:输入:["Shogun", "Tapioca Express", "Burger King", "KFC"]["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse"
2020-05-10 21:28:34
158
原创 1417. 重新格式化字符串
给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母。请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。示例 1:输入:s = "a0b1c2"输出:"0a1b2c"解释:"0a1b2c" 中任意两个相邻字符的类型都不同。 "a0b1c2", "0a1b2c", "0c2a1b" 也是满足题目要求的答案。示例 2:...
2020-05-10 21:20:41
163
原创 ubuntu apt-get update 更新失败
网上找了很多,发现不是很好用,终于在stackoverflow上找到并更新成功很简单两句rm /var/lib/lists/* -vfsudo apt-get update至此就应该更新成功网上非常常见的sudo rm -r /etc/apt/sources.list.d/自己试验没能成功,该目录下是第三方源目录所在,删除作用不大另外如果新安装ubu
2017-01-03 17:02:24
423
原创 按升序输出文档中包含的要查询的单词
在c++ primer第五版中第12章末尾要求输入一些文本,输出要查询的单词在原文本中总共有多少行包含该单词,并按升序输出该单词所在行号分析:既然要输出包含的单词所在行号,就要先将文本按行保存起来然后要求按升序输出,想到set类自动升序保存,同一行中包含多个要查询单词也只保存一次,符合要求也好用故写了个没有share_ptr的文本查询函数,如下不如书本大气灵
2016-11-03 20:43:20
327
原创 关于 extern 的有关问题
其实在百度百科上有现记录下来,一来有个过脑的过程,二来相对更精炼些,再有些自己所想extern 是关键字,用在c/c++函数中,用来表征外部变量或外部函数其中在使用extern时要注意:在实际编程时要严格对应声明时的形式如果在某个.c文件中要用外部变量,通常在对应的头文件中用extern声明该变量对于变量来说extern int a;//声明一个全局变量in
2016-11-03 19:08:57
400
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人