- 博客(156)
- 收藏
- 关注
原创 静态变量&&static的用法和作用
静态变量静态变量什么时候初始化?在主程序之前,编译器已为其分配好内存;静态全局变量:在程序刚开始运行时就完成初始化静态局部变量:在c++中,在执行相关代码时才会进行初始化(只有一次);这是因为:c++引入对象后,要进行初始化必须执行相应的构造函数和析构函数,所以,c++标准定为全局和静态对象是由首次用到时才会进行构造,并通过atexit()来管理,所以c++是可以使用变量对静态局部变量进行初始化的。静态成员与普通成员的区别生命周期共享方式定义位置初始化位置默
2022-04-15 16:12:55
264
原创 c++ 多态
c++ 多态多态:同一事物表现出不同事物的能力,即向不同对象发送同一消息,不同的对象在接收时会产生不同的行为。多态性是指用一个名字,定义不同的函数,这些函数执行不同但又类似的操作,这样就可以使用同一个函数名调用不同内容的函数。在程序设计中经常使用多态性,例如:运算符,使用运算符+,可以实现整型数、浮点型数、双精度等类型之间的加法。重载实现编译时多态,虚函数(覆盖)实现运行时多态。重载:允许存在多个同名函数,而这些函数的参数表不同覆盖:指子类重写父类的虚函数多态性是允许你将父对象设置
2022-04-12 16:37:53
778
原创 c++ 定义模板
定义模板当定义一个比较函数时,因为参数类型包括int、float、char等等,若为每个类型都定义一个比较函数,就不得不重复定义完全一样的函数体,并且需要确定要比较的所有类型,就比较麻烦了。函数模板 : 以关键字开始 加一个模板参数列表template <typename T>这样就可以定义一个通用的函数模板,而不是为每一数据类型都定义一个新函数template <typename T>int compare(const T &v1,const T &v
2022-04-12 14:53:49
1579
原创 列表初始化构造函数
列表初始化构造函数当成员是const或者引用的话,必须将其初始化。类似的,当成员属于某种类类型且该类没有定义默认构造函数时,也必须将这个成员初始化。// 例如:class ConstRef { public: ConstRef(int ii); private: int i; const int ci; // 常量 int& ri; // 引用};// 如果没有为它们提供构造函数初始值的话将引发错误:// 错误:ci和ri必须被初始化
2022-04-12 10:22:10
191
原创 const限定符
const限定符const对象必须初始化1.如果利用一个对象去初始化另一个对象,则它们是不是const都无关紧要int i=42;const int ci = i; // 正确:i的值被拷贝给了ci;int j = ci; // 正确:ci的值被拷贝给了j;// 尽管ci是整形常量,但无论如何ci中的值还是一个整型数。ci的常量特征仅仅在执行改变ci的操作时才会发挥作用。拷贝一个对象的值并不会改变它,一旦拷贝完成,新的对象和原来的对象就没有什么关系了。// 在编译
2022-04-11 21:15:03
178
原创 组合问题呢
组合问题全排列全排列Ⅰ数组内不含重复数字// 回溯class Solution { vector<vector<int>> ans;public: void backtracking(vector<int>& nums,int label) { // 确定终止条件 if(label == nums.size()) { ans.push_back(nums
2022-04-11 16:46:59
224
原创 C++ .sort()重载
C++ .sort()重载头文件#include<algorithm>.sort()函数参数void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);// first:要排序的数组的起始地址;// last:要排序的数组的结束地址;// comp:排序的方法,默认是从小到大 - 升序;实例// *** 实例1:自定义cmp实现从大到小排序 ***#inclu
2022-04-11 11:29:21
2198
原创 剑指offer 56 - Ⅱ.数组中数字出现的次数Ⅱ
剑指offer 56 - Ⅱ.数组中数字出现的次数Ⅱ问题:一个数组,其中只有一个数出现过1次,其他数都出现了3次,找出这个只出现一次的数字。思路:出现过3次的数的和一定能整除以3不留余数遍历每一个数,数的每一bit对应加入长度为32的数组的各个位置;数组各个位置保存的数对3取余就是ans相应bit的值,ans不断左移,每次取余后的数放入ans的最后位置;return ans;class Solution {public: int singleNumber(vector<int
2022-04-11 09:50:20
242
原创 剑指offer 56 - Ⅱ.数组中数字出现的次数Ⅱ
剑指offer 56 - Ⅱ.数组中数字出现的次数Ⅱ问题:一个数组,其中只有一个数出现过1次,其他数都出现了3次,找出这个只出现一次的数字。思路:出现过3次的数的和一定能整除以3不留余数class Solution {public: int singleNumber(vector<int>& nums) { vector<int> sums(32,0); for(int num:nums) {
2022-04-10 21:20:25
306
原创 LeetCode 347. 前K个高频元素
LeetCode 347. 前K个高频元素输入一个整数数组和一个整数k,返回其中出现频率前k高的元素。保证答案唯一,不会出现返回元素的个数大于k的情况,可以按任意顺序返回答案。思路:建立哈希表统计每个元素出现的次数建立容量为10001的vector表示:出现次数i-出现次数都为i的全部元素[元素1,元素2…];vector<vector<int>> topK(10001,vector<int>{});topK[i.second].push_back(
2022-04-08 11:30:11
148
原创 优先队列啊
priority_queuepriority_queue<Type, Container, Functional>// type:数据类型// container:容器类型// functional:比较的方式 默认是大顶堆,具体实现// 升序队列,小顶堆priority_queue<int,vector<int>,greater<int>> q;// 降序队列,大顶堆priority_queue<int,vector<int
2022-04-01 21:54:19
172
原创 背包问题嗯
背包问题“0-1背包”二维数组:// 递推公式二维:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); 一维:dp[j] = max(dp[j], dp[j - nums[i]] + weight[i]);dp[i] [j] :从下标[0-i]的物品里任意取,放进容量为j的背包,价值总和最大为多少。dp数组内容变化:01515151501515max(15,0+20)=20
2022-03-25 10:09:52
603
原创 LeetCode 1143.最长公共子序列
LeetCode 1143.最长公共子序列动态规划确定dp数组及其下标的含义dp[i] [j]:长度为**[0,i-1]的字符串text1与长度为[0,j-1]**的字符串text2的最长公共子序列为dp[i] [j]确定递推公式分两种情况:text1[i-1]与text2[j-1]相同;即找到一个公共元素,dp[i] [j] = dp[i-1] [j-1] + 1;text1[i-1]与text2[j-1]不同;找max(text1[0,i-2]与text2[0,j-1]和text
2022-03-24 10:59:29
1422
原创 LeetCode 300.最长递增子序列
LeetCode 300.最长递增子序列动态规划dp数组的定义:以第i个元素为结尾的递增子序列的长度ways: 遍历nums各个元素,当便利到第i个元素时,依次与它前面的元素一一比较,如果nums[i] > nums[j] ,则此时dp[i] = max(dp[i],dp[j]+1]) 最后return 最大的dp[i]完整代码:class Solution {public: int lengthOfLIS(vector<int>& nums)
2022-03-23 16:43:09
1114
原创 LeetCode 33.搜索旋转排序数组
LeetCode 33.搜索旋转排序数组二分法将数组一分为二,其中一定有一个是有序的,另一个可能是有序,也能是部分有序。此时有序部分用二分法查找。无序部分再一分为二,其中一个一定有序,另一个可能有序,可能无序。就这样循环.eg:nums=[4,5,6,7,0,1,2],target = 04567012leftl0l1,2rightr2r0,r1midm0m2m1完整代码:class Solutio
2022-03-23 16:00:39
829
原创 LeetCode 343.整数拆分
LeetCode 343.整数拆分111111111112345678910112469121827363 x 3 > 2 x 2 x 210 = 3 + 7 (7 > 3)7 = 3 + 4 (7 > 3)4 = 3+1 || 2+2 (1 < 3)/3 余大于3 : 继续除以3/3 余小于3 : 余0 : 最后是3, 余1 : 最后是4,4时4最大
2022-03-23 14:12:45
539
原创 LeetCode 139.单词拆分
LeetCode 139.单词拆分ways:dp[n]的定义: 从s[0]到s[n]是否可以利用字典中出现的单词拼接出来dp初始化: dp要比s多一个,并且dp[0] = true步骤:遍历s: if(s[i] == wordDict[j] [0]) : i和j[0]向下遍历,if(s的一部分和wordDict[j]都相等并且dp[s之前之前结束的位置]==true) , 则dp[s现在结束的位置] = true; else 继续遍历return dp[s.size(
2022-03-23 10:42:16
308
原创 LeetCode 279.完全平方数
LeetCode 279.完全平方数ways:动态规划dp[i] : 代表i最少由几个完全平方数组成初始化:dp[0] : 0dp[i] : i // 最差情况是由i个1组成递推公式:dp[i] = min(dp[i],dp[i-j*j]+1) // ‘‘寻找距离i最近的完全平方数‘’完整代码:class Solution {public: int numSquares(int n) { vector<int> dp(n+1,0);
2022-03-22 11:06:21
497
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人