- 博客(87)
- 收藏
- 关注
原创 观察者模式
#include<iostream> #include<list> #include<string> using namespace std; class Subject; class Observer { public: Observer() {} virtual ~Observer() {} virtual void update(Subject* subject) = 0; virtual void update(string content) = .
2020-11-16 20:30:57
217
原创 C/C++编程题刷题:质数对的个数
#include<iostream> using namespace std; bool isPrime(int n) { for (int i = 2; i < n; i++) { if (n%i == 0) return false; } return true; } int main() { int n; cin >> n; int cnt = 0; for (int i = 2; i < n; i++) { if (isPrime(i.
2020-11-07 00:16:54
393
原创 C/C++编程题刷题:多线程交替打印ABC
#include<thread> #include<iostream> #include<mutex> #include<vector> #include<condition_variable> using namespace std; mutex mtx; condition_variable cond; char s[] = { 'A','B','C' }; char message = 'A'; void handler(int i) .
2020-11-07 00:15:34
495
原创 Mymemmove_memcpy类
#include<iostream> using namespace std; void* mymemcpy(void *dst, const void *src, size_t size) { if (dst == NULL || src == NULL) return NULL; char* psrc; char* pdst; psrc = (char*)src; pdst = (char*)dst; while (size--) { *pdst++ = *psrc+..
2020-11-07 00:08:28
168
原创 MyStringcopy类
#include<iostream> #include<assert.h> using namespace std; int mystrlen(const char* src) { assert(src != NULL); const char* head = src; while (*src != '\0') src++; return (src - head - 1); } char * mystrcopy(char * src, char* dst) { if ..
2020-11-07 00:07:23
177
原创 MyString类
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> using namespace std; class MyString { public: MyString(); MyString(const char* const p); MyString(const MyString & s); ~MyString(); MyString& operator = (const ..
2020-11-07 00:05:48
316
原创 栈
#include<iostream> using namespace std; class MyStack { public: MyStack(int cap) { capacity = cap; Bottom = 0; Top = 0; size = 0; pStack = new int[capacity]; } MyStack() { capacity = 5; Bottom = 0; Top = 0; size = 0; pStack =.
2020-11-07 00:04:25
103
原创 循环队列
#include<iostream> using namespace std; class cycleQueue { private: int *cycleQueueHead; int front; int rear; int size; void resize() { int *temp = new int[size * 2]; int j = 0; for (int i = front; i != rear; i = (i + 1) % size) { tem.
2020-11-07 00:03:37
119
原创 C/C++编程题刷题:topK快排和堆排序的解决方案
#include<iostream> #include<vector> #include<deque> using namespace std; #define random(x) (rand()%x) bool isAsc = false; //堆调整 void HeapAdjust(vector<int> &nums, int index, int n) { int leftChild = 2 * index + 1; int righC.
2020-11-06 20:35:24
246
原创 单例模式
问题描述 现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进行写日志。那么,如何构造一个日志模块的实例呢?难道,每次new一个日志模块实例,写完日志,再delete,不要告诉我你是这么干的。在C++中,可以构造一个日志模块的全局变量,那么在任何地方就都可以用了,是的,不错。但是,我所在的开发部门的C++编码规范是参照Google的编码规范的。 全局变量在项目中是能不
2020-08-30 15:57:15
120
原创 C/C++编程题刷题:leetcode415. 字符串相加
415. 字符串相加 难度简单252 给定两个字符串形式的非负整数num1和num2,计算它们的和。 提示: num1和num2的长度都小于 5100 num1和num2都只包含数字0-9 num1和num2都不包含任何前导零 你不能使用任何內建 BigInteger 库,也不能直接将输入的字符串转换为整数形式 class Solution { public: string addStrings(string num1, string num2) { ...
2020-08-27 10:03:23
335
原创 C/C++编程题刷题:leecode169. 多数元素
169. 多数元素 难度简单708 给定一个大小为n的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例1: 输入: [3,2,3] 输出: 3 示例2: 输入: [2,2,1,1,1,2,2] 输出: 2 class Solution { public: int majorityElement(vector<int>& nums) { ...
2020-08-27 10:03:16
213
原创 C/C++编程题刷题:leetcode 796. 旋转字符串
796. 旋转字符串 难度简单93 给定两个字符串,A和B。 A的旋转操作就是将A最左边的字符移动到最右边。例如, 若A = 'abcde',在移动一次之后结果就是'bcdea'。如果在若干次旋转操作之后,A能变成B,那么返回True。 示例 1: 输入: A = 'abcde', B = 'cdeab' 输出: true 示例 2: 输入: A = 'abcde', B = 'abced' 输出: false class Solution { public: b...
2020-08-27 10:03:09
317
转载 C/C++编程题刷题:leetcode 剑指 Offer 41. 数据流中的中位数
剑指 Offer 41. 数据流中的中位数 难度困难53 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 例如, [2,3,4]的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMed.
2020-08-27 10:03:02
210
原创 C/C++编程题刷题:leetcode 20. 有效的括号
20. 有效的括号 难度简单1804 给定一个只包括'(',')','{','}','[',']'的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例2: 输入: "()[]{}" 输出: true 示例3: 输入: "(]" 输出: false 示例4: 输入: "([)]" 输出: false 示例...
2020-08-27 10:02:56
282
原创 C/C++编程题刷题:leetcode 680. 验证回文字符串 Ⅱ
680. 验证回文字符串 Ⅱ 难度简单247 给定一个非空字符串s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca" 输出: True 解释: 你可以删除c字符。 class Solution { public: bool checkPalindrome(const string& s, int low, int high) { for (int i = low, j = .
2020-08-27 10:02:46
337
原创 C/C++编程题刷题:leetcode 62. 不同路径 和 63. 不同路径 II
62. 不同路径 难度中等649 一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 例如,上图是一个7 x 3 的网格。有多少可能的路径? 示例1: 输入: m = 3, n = 2 输出: 3 解释: 从左上角开始,总共有 3 条路径可以到达右下角。 1. 向右 -> 向右 -> 向下 2. 向右 ->...
2020-08-27 10:02:38
463
原创 C/C++编程题刷题:leetcode 445. 两数相加 II
445. 两数相加 II 给你两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 进阶: 如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。 示例: 输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 8 -> 0 -> 7 /** * De...
2020-08-27 10:02:31
195
原创 C/C++编程题刷题:leetcode 23 合并K个升序链表
23. 合并K个升序链表 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [ 1->4->5, 1->3->4, 2->6 ] 将它们合并到一个有序链表中得到。 1->1->2->3->4->4->5->6 示例
2020-08-27 10:02:20
473
原创 C/C++编程题刷题:leetcode 814. 二叉树剪枝
814. 二叉树剪枝 难度中等102 给定二叉树根结点root,此外树的每个结点的值要么是 0,要么是 1。 返回移除了所有不包含 1 的子树的原二叉树。 ( 节点 X 的子树为 X 本身,以及所有 X 的后代。) 示例1: 输入: [1,null,0,0,1] 输出: [1,null,0,null,1] 解释: 只有红色节点满足条件“所有不包含 1 的子树”。 右图为返回的答案。 示例2: 输入: [1,0,1,0,0,0,1] 输出: [1,null,1,null,1...
2020-08-25 10:10:20
233
原创 C/C++编程题刷题:leetcode 110. 平衡二叉树
110. 平衡二叉树 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回true。示例 2: 给定二叉树[1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / ...
2020-08-25 10:10:12
201
原创 C/C++编程题刷题:leetcode 958. 二叉树的完全性检验
958. 二叉树的完全性检验 给定一个二叉树,确定它是否是一个完全二叉树。 完全二叉树的定义如下: 若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~2h个节点。) 示例 1: 输入:[1,2,3,4,5,6] 输出:true 解释:最后一层前的每一层都是满的(即,结点值为 {1} 和 {2,3} 的两层),且最后一层中的所有结点({4,5,6})都尽可能地向左..
2020-08-25 10:09:58
228
原创 C/C++编程题刷题:leetcode 322. 零钱兑换
322. 零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。 示例1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amount = 3 输出: -1 ...
2020-08-25 10:09:21
596
原创 C/C++编程题刷题:leetcode300. 最长上升子序列
300. 最长上升子序列 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是[2,3,7,101],它的长度是 4 class Solution { public: int lengthOfLIS(vector<int>& nums) { //dp 表示以nums[i]结尾的最长上升子序列为dp[i] if (.
2020-08-25 10:09:09
229
原创 C/C++编程题刷题:剑指 Offer 34. 二叉树中和为某一值的路径
剑指 Offer 34. 二叉树中和为某一值的路径 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 示例: 给定如下二叉树,以及目标和sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1.
2020-08-25 10:08:43
159
原创 C/C++编程题刷题:leetcode 3. 无重复字符的最长子串
3. 无重复字符的最长子串 难度中等4187 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你...
2020-08-25 10:08:32
142
原创 C/C++编程题刷题:leetcode 257. 二叉树的所有路径
257. 二叉树的所有路径 难度简单312 给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明:叶子节点是指没有子节点的节点。 示例: 输入: 1 / \ 2 3 \ 5 输出: ["1->2->5", "1->3"] 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3 /** * Definition for a binary tree node. * struct TreeNode { * .
2020-08-25 10:07:51
247
原创 C/C++编程题刷题:leetcode 7. 整数反转
7. 整数反转 难度简单2112 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 class Solution { public: int reverse(int x) { if(x/10==0) return x; //平凡情况:若x∈[-9,9],则直接返回其本身 long ..
2020-08-25 10:07:37
179
原创 C/C++编程题刷题:leetcode 92. 反转链表 II
92. 反转链表 II 难度中等474 反转从位置m到n的链表。请使用一趟扫描完成反转。 说明: 1 ≤m≤n≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL /** * Definition for singly-linked list. * struct ListNode { * int val; *...
2020-08-25 10:07:02
155
原创 C/C++编程题刷题:leetcode 21. 合并两个有序链表
21. 合并两个有序链表 难度简单1219 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ...
2020-08-24 12:22:21
329
1
原创 C/C++编程题刷题:leetcode 543. 二叉树的直径
543. 二叉树的直径 难度简单447 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 返回3, 它的长度是路径 [4,2,1,3] 或者[5,2,1,3]。 /** * Definition for a binary tree node...
2020-08-24 12:22:12
336
原创 C/C++编程题刷题:leetcode 104. 二叉树的最大深度
104. 二叉树的最大深度 难度简单673 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明:叶子节点是指没有子节点的节点。 示例: 给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度3 。 1.dfs /** * Definition for a binary tree node. * struct TreeNode { ...
2020-08-24 12:22:00
137
原创 C/C++编程题刷题:leetcode 234. 回文链表
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) {} *
2020-08-24 12:21:51
119
原创 C/C++编程题刷题:leetcode344. 反转字符串
344. 反转字符串 难度简单269 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是ASCII码表中的可打印字符。 示例 1: 输入:["h","e","l","l","o"] 输出:["o","l","l","e","h"] 示例 2: 输入:["H","a","n","n","a","h"] 输出:["...
2020-08-24 12:21:40
182
原创 C/C++编程题刷题:leetcode977. 有序数组的平方
977. 有序数组的平方 给定一个按非递减顺序排序的整数数组A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 示例 1: 输入:[-4,-1,0,3,10] 输出:[0,1,9,16,100] 示例 2: 输入:[-7,-3,2,3,11] 输出:[4,9,9,49,121] 提示: 1 <= A.length <= 10000 -10000 <= A[i] <= 10000 A已按非递减顺序排序。 class Solution { p..
2020-08-24 12:21:26
278
原创 C/C++编程题刷题:leetcode153. 寻找旋转排序数组中的最小值
153. 寻找旋转排序数组中的最小值 难度中等240 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。 请找出其中最小的元素。 你可以假设数组中不存在重复元素。 示例 1: 输入: [3,4,5,1,2] 输出: 1 示例 2: 输入: [4,5,6,7,0,1,2] 输出: 0 class Solution { public: int minArray(vector<...
2020-08-24 12:20:45
153
原创 C/C++编程题刷题:leetcode81. 搜索旋转排序数组 II
81. 搜索旋转排序数组 II 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组[0,0,1,2,2,5,6]可能变为[2,5,6,0,0,1,2])。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回true,否则返回false。 示例1: 输入: nums = [2,5,6,0,0,1,2], target = 0 输出: true 示例2: 输入: nums = [2,5,6,0,0,1,2], target = 3 输出: fals...
2020-08-24 12:20:33
237
原创 C/C++编程题刷题:440. 字典序的第K小数字
440. 字典序的第K小数字 给定整数n和k,找到1到n中字典序第k小的数字。 注意:1 ≤ k ≤ n ≤ 109。 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。 class Solution { public: int findKthNumber(int n, int k) { long long...
2020-08-24 11:10:17
619
原创 C/C++编程题刷题:leetcode 386. 字典序排数
386. 字典序排数 给定一个整数n, 返回从1到n的字典顺序。 例如, 给定n=1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。 请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据n小于等于5,000,000。 class Solution { public: vector<int> res; vector<int> lexicalOrder(int n) { for(int i=...
2020-08-24 10:42:57
279
原创 C/C++编程题刷题:leetcode 206. 反转链表
206. 反转链表 难度简单1174 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next
2020-08-23 10:05:16
207
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人