并发与多线程
并发与多线程转自:🔥【github】
1、创建线程 调用线程函数: 1thread myThread(函数名);
可调用对象做参数:
线程的入口函数在对象的类重载()的函数void operator()()中,对象是值传递所以还必须有拷贝构造函数Obj(const &obj),这里对象是值传递1234void operator()(){};thread myThread(对象);void operator()(int val);thread myThread(对象,val);
lambda表达式:
123456789auto mylamthread = [] { ;}````使用线程:-----------* 实际只使用join():只有当所有线程运行结束后才运行主线程```cppthreadObj.detach();threadObj.join();threadObj.joinable(); //判断是否可以使用join()
2、线程传参普通类型做线程参数
创建线程时,即使线程函数参数是&, ...
题解目录
:books: Leetcode题解目录(转载)转自:🔥【github】
为了进大厂🐛,目前进度208/300题,特此记录刷过的所有题,涵盖了基本题型,精简的解题思路,此repo属于 C++ 版的题解。
感谢您的观看,希望对您有帮助,欢迎热烈的交流🎉!如果感觉还不错就点个赞 star 吧✨✨✨~
这是我的🔥【github】 里面有适合 C++ 萌新的练手项目,热烈欢迎🎉帮助我收集整理题目或者提供解题思路🐳~。
🚀剑指offer题解 🚀程序员面试金典
🎨算法思想
双指针
排序
贪心思想
二分查找
[分治]
[搜索]
动态规划
[数学]
:snowflake:数据结构相关
链表
树
栈和队列
哈希表
字符串
[数组与矩阵]
[图]
位运算
🎨力扣周赛
🐳链表🐳
🐳链表🐳
排序由易到难
19.删除链表的倒数第N个节点
21.合并两个有序链表
24.两两交换链表中的节点
83.删除排序链表中的重复元素
141.环形链表
160.相交链表
206.反转链表
234.回文链表
328.奇偶链表
445.两数相加II
725.分隔链表
817.链表组件
删除链表的倒数第N个节点Leetcode 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
解题思路
使用快慢指针法,让快指针提前先走n+1步,再同步快慢指针直到快指针指向链表结尾时,慢指针刚好停留在需要删除结点的前驱。
添加头结点 dummy 是为了统一对链表增删的操作。
删除结点相当于链接时跳过此结点12345678910111213141516ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* dummy=new ListNode(-1); dummy->next=head; ListNode* fast=dummy; ListNode* slow=d ...
树🌲
:seedling:树
94.二叉树的中序遍历
144.二叉树的前序遍历
145.二叉树的后序遍历
98.验证二叉搜索树
101.对称二叉树
102.二叉树的层序遍历
107.二叉树的层次遍历II
103.二叉树的锯齿形层次遍历
104.二叉树的最大深度
110.平衡二叉树
111.二叉树的最小深度
112.路径总和
124.二叉树中的最大路径和
230.二叉搜索树中第K小的元素
226.翻转二叉树
236.二叉树的最近公共祖先
513.找树左下角的值
617.合并二叉树
687.最长同值路径
671.二叉树中第二小的节点
669.修剪二叉搜索树
701.二叉搜索树中的插入操作
二叉树的中序遍历Leetcode给定一个二叉树,返回它的迭代中序遍历。
解题思路
使用辅助栈,中序遍历是访问顺序左-中-右
所以每到一个节点 A,因为根的访问在中间,将 A 入栈。然后遍历左子树,接着访问 A,最后遍历右子树。在访问完 A 后,A 就可以出栈了。因为 A 和其左子树都已经访问完成。12345678910111213141 ...
🎨程序员面试金典🎨
🎨程序员面试金典🎨转自:🔥【github】
1.判定字符是否唯一
2.判定是否互为字符重排
3.URL化
4.回文排列
5.一次编辑
6.字符串压缩
7.旋转矩阵
8.零矩阵
9.字符串轮转
10.移除重复节点
11.返回倒数第k个节点
12.删除中间节点
13.分割链表
14.链表求和
15.回文链表
16.链表相交
17.环路检测
18.栈的最小值
19.化栈为队
20.栈排序
判定字符是否唯一leetcode实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
解题思路
首先想到哈希表统计各字母出现频率,只遍历一次,频率大于1就返回false。12345678bool isUnique(string astr) { unordered_map<char, int> cnt; for (int i = 0; i < astr.size(); ++i) { cnt[astr[i]]++; if (cnt[astr[i]] > 1) return false; } ...
📸排序📸
📸排序📸
堆排序、快速排序
215.数组中的第K个最大元素
建立哈希表并排序
347.前K个高频元素
451.按照字符出现次数对字符串排序
荷兰国旗问题
75.按颜色进行排序
数组中的第K个最大元素leetcode在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
使用SLT库排序1234int findKthLargest(vector<int>& nums, int k) { sort(nums.begin(), nums.end()); return nums[nums.size() - k];}
堆排序解题思路
堆排序会使用到优先队列priority_queue,可以当成一种高级队列,只不过这个队列是已经排好序的。
维护一个个数为k的小顶堆,堆从从上到下按从小到大排序
始终保持堆的大小为k,超出k就pop(),直到遍历结束位置,堆中存放着前k个最大元素,堆顶的元素就是正确答案。12345678int findKthLa ...
数组
数组
5460. 好数对的数目
好数对的数目leetcode给你一个整数数组 nums 。如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。返回好数对的数目。
示例123输入:nums = [1,2,3,1,1,3]输出:4解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始
解题思路
只要想到用一个二维数组的方式来判断就很简单,用到双层for循环暴力解决。12345678910int numIdenticalPairs(vector<int>& nums) { int cnt = 0; for (int i = 0; i < nums.size(); ++i) { for (int j = 0; j < i; ++j) { if (nums[i] == nums[j]) cnt ++; } ...
栈和队列
🚑栈和队列🚑转自:🔥【github】
7.整数反转
9.回文数
20.有效的括号
232.用栈实现队列
225.用队列实现栈
155.最小栈
150.逆波兰表达式求值
394.字符串解码
133.克隆图
200.岛屿数量
84.柱状图中最大的矩形
542.01矩阵
622.设计循环队列
整数反转Leetcode给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转
解题思路
从低到高位依次加入队列,然后输出
注意反转后的溢出问题123456789int reverse(int x) { int rev=0; while(x!=0){ if(rev>INT_MAX/10 || rev<INT_MIN/10) return 0; rev=rev*10+x%10; x/=10; } return rev;}
回文数Leetcode判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
解题思路 ...
双指针
🐛双指针🐛转自:🔥【github】
19. 删除链表的倒数第N个节点
75.颜色分类
88.合并两个有序数组
167.两数之和II-输入有序数组
345.反转字符串中的元音字母
524.通过删除字母匹配到字典里最长单词
633.平方数之和
647.回文子串
680.验证回文字符串Ⅱ
5461.仅含1的子串数
删除链表的倒数第N个节点leetcode给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
解题思路
使用快慢指针,让快指针提前先走n+1步,然后双指针再同时让前走,当快指针指到结尾时,慢指针指向要删除结点得前驱
为了让整个链表得删除操作都统一起来,所以加入了头节点dummy,因为删除某个结点得操作需要它得前驱,而第一个结点没有前驱,所以加入头结点会更方便,删除操作与其他结点统一。
链表所谓删除结点,即前一个结点得next指针越过此结点,指向下一结点12345678910111213141516ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* dummy = ...
哈希表
⚗哈希表⚗转自:🔥【github】
1.两数之和
205.同构字符串
217.存在重复元素
242.有效的字母异位词
347.前K个高频元素
409.最长回文串
451.根据字符出现频率排序
594.最长和谐子序列
C++哈希表的基本使用
查找元素是否存在1234若有unordered_map<int, int> mp;查找x是否在map中方法1: 若存在 mp.find(x)!=mp.end();方法2: 若存在 mp.count(x)!=0;
遍历map12345 unordered_map<key,T>::iterator it; (*it).first; (*it).second for(unordered_map<key,T>::iterator iter=mp.begin();iter!=mp.end();iter++) cout<<"key value is"<<iter->first&l ...