这个七月
文章平均质量分 71
隔壁班胡胖胖
这个作者很懒,什么都没留下…
展开
-
DayThree 面向对象设计模式
面向对象设计模式遵从面向对象开发语言的三大设计原则:封装、继承、多态在编写类的时候,要注意每个类应该仅有一个引起他变化的原因,即单一职责原则。在设计类的时候应当注意,类的模块应该是可以拓展的,但是不可以被修改,这称为开放封闭原则。编写出来的从父类继承得到的子类应该能够替换基类,这称为Liskov替换原则高层的模块不应当依赖于底层模块,二者都应当依赖于抽象,抽象不应该依赖于实现...原创 2019-07-24 10:59:54 · 67 阅读 · 0 评论 -
DayTwentyOne 容器与迭代器
标准库中的容器是泛型数据结构,特别适合保存数据集合。使用标准库时,几乎不需要使用标准C风格数组、编写链表或者设计堆栈。容器被实现为类模板,因此可利用任何满足以下基本条件的类型进行实例化。除array和bitset外,大部分标准库容器的大小灵活多变,都能实现自动增长或收缩,以容纳更多或更少的元素,和固定大小的旧的标准C风格数组相比,这有着巨大的优势。由于本质上标准C风格数组的大小是固定的,因此容易...原创 2019-08-13 19:02:14 · 86 阅读 · 0 评论 -
DaySixteen 笔记
在在线平台进行OJ的时候,记得一定要初始化变量,不管是什么类型,都要记得初始化!!!原创 2019-08-09 18:58:47 · 117 阅读 · 0 评论 -
DaySeventeen 就还叫你笔记吧!
今天在看背包问题啊,粗略的分一下,大概有下面几种背包问题01背包问题完全背包问题多重背包问题混合背包问题二维费用的背包问题分组背包问题有依赖的背包问题0x01 01背包问题有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。这是最基础的背包问题,给出的物品仅有两种选择,...原创 2019-08-09 19:30:04 · 199 阅读 · 0 评论 -
DayTwentyTwo 依旧是笔记呀
今天用到的数据结构//如果可以的话,尽量使用pair替代简单的结构体,方便使用,且pair在排序的时候,会自动按照first域进行排。struct ListNode{ int val; ListNode* next; ListNode(int x) : val(x), next(NULL){}};struct TreeNode{ int val; TreeNode* l...原创 2019-08-14 15:37:10 · 85 阅读 · 0 评论 -
DayEighteen 大概还是笔记吧
vector构造的时候,可以将现有的数组进行逆序输出:vector<int> (res.rbegin(),res.rend());原创 2019-08-10 22:05:24 · 86 阅读 · 0 评论 -
DayNineteen STL的笔记~
VECTORvector本身可以作为数组使用,而且一些元素个数不确定的场合可以很好地节省空间。SETset的主要作用是自动去重并按升序排序,因此碰到需要去重但是却不方便直接开数组的情况,可以尝试用set解决。另外 C++中增加了unordered_set,以散列代替set内部的红黑树实现,使其可以用来处理只去重但不排序的需求,速度比set要快得多。STRING只能使用CIN ...原创 2019-08-11 12:16:46 · 66 阅读 · 0 评论 -
DayTwentyThree 烦人的笔试
初始数据集的排列顺序对算法的性能无影响的算法有:选(直接选择排序)归(归并排序)堆(堆排序)影响排序算法时间复杂度的主要原因是比较的次数基于比较的排序算法有:直接插入排序冒泡排序简单选择排序希尔排序快速排序堆排序归并排序基数排序、桶排序都属于分配式排序,且都是稳定排序算法比较次数与序列初始状态无关的排序方法简单选择排序二分插入排序...原创 2019-08-15 13:53:45 · 83 阅读 · 0 评论 -
DayTwenty 今日份笔记
写循环的时候,如果需要变量最终值大于等于零,可以使用~i替代 i>=0STL容器的一点小总结。原创 2019-08-12 14:27:43 · 80 阅读 · 0 评论 -
DayTwentyFour 烦人的笔试
resize() 方法可以为数组提前分配大小,但不分配内存。当一个数在一堆数中出现的次数大于整体个数的一半时 可以用以下代码找出这个数 int moreThanHalfNum_Solution(vector<int>& nums) { int cnt = 0, val = -1; for (auto x : nums) { if (!cnt) val ...原创 2019-08-16 15:07:53 · 73 阅读 · 0 评论 -
DayTwentySeven 今天美团笔试 = =
不使用除法求一串序列除掉某个数的乘积class Solution {public: vector<int> pre, bac, output; vector<int> productExceptSelf(vector<int>& nums) { int res = 1; for (int i = 0; i < nums.size...原创 2019-08-22 12:32:05 · 94 阅读 · 0 评论 -
DayTwentyFive Dp一点点
解决DP问题时,需要先确定初始状态,然后确定如何转移状态,再编程进行求解。前序遍历的迭代写法 vector<int> preorderTraversal(TreeNode* root) { vector<int> res; while (root) { if (!root->left) { res.push_back(roo...原创 2019-08-17 19:28:47 · 86 阅读 · 0 评论 -
DayTwentySix 今日份笔记
做递归问题时的思考方法状态的含义是什么(通过所求答案得出状态含义)顺序是什么确定结束状态原创 2019-08-18 12:34:56 · 96 阅读 · 0 评论 -
DayFifteen 难搞哦,还是笔记呀
return !b ? a : gcd(b, a % b);//求公约数心情不好= =原创 2019-08-08 10:23:03 · 72 阅读 · 0 评论 -
DaySix 一些小的知识点
在使用unsigned int型变量接收int型变量赋值的时候,如果是负数,接收到的值为该负数的二进制补码。vector < vector<bool>> st(10, vector<bool>(20)) 可以采用这样的形式去创建一个vector二维数组,且第二维为一个bool值。queue<pair<int, int>> q...原创 2019-07-28 13:48:20 · 121 阅读 · 0 评论 -
DayFour C++的编程技巧
智能指针对象不需要手动释放内存,内存会自动释放,调试的时候,可以看到在智能指针对象的结构体中,有一个叫deleter的域,猜测可能是该域完成对指针对象的释放。默认情况下,编译器会自动生成复制构造函数,而大多数情况下,这个复制构造函数已经可以满足大多数情况下的使用。...原创 2019-07-24 11:26:12 · 108 阅读 · 0 评论 -
DaySeven 关于树的一些简单操作
使用long long类型可以防止数据在和INT_MIN 或者INT_MAX进行操作时,数据溢出。使用如下面所示的代码可以比较一棵二叉树是否左右对称 bool isSymmetric(TreeNode* root) { if(!root) return true; return dfs(root->left, root->right);...原创 2019-07-29 13:57:37 · 96 阅读 · 0 评论 -
DayOne C++基础知识复习
在C++中,一般在头文件(.h)中定义,然后在源文件(.cpp)中进行实现。旧版C++中使用#ifndef[key] #endif 来确保头文件只引用了一次,保证不会循环引用。最新的编译器使用#pragma once指令来确保不会出现循环引用。使用endl来表示一行输出的结尾,或者是使用‘\n’来表示一行的结尾。与cout和cin这两个流输入输出方式相比起来,printf和sc...原创 2019-07-20 13:16:05 · 65 阅读 · 0 评论 -
DayEight C++的一些小技巧
x & 0x01当一个数和0x01做与运算时,可以得到该数的二进制的最后一位。x=x>>1左移操作相当于删除该数二进制位的最后一位,右移反之。在使用Swap函数交换两个结点的时候,其结点的左右儿子也会跟着一起被交换在寻找一棵二叉树的最大深度时,可采用递归的办法,每次查找当前子树的最大深度,再加一就是根节点的深度。两个小时十道题应该可以吧,加油!...原创 2019-07-30 14:15:37 · 83 阅读 · 0 评论 -
DayEleven 还是笔记呀
memcpy(a,b,sizeof b); 可以使用这个操作,将b数组里面的所有值全部拷贝给aa>>i & 1 这个操作可以判断a的二进制位的第i位是不是为1原创 2019-08-02 20:13:34 · 117 阅读 · 0 评论 -
DayTwo 二分及代码风格
代码风格这里不细说喽。今天最大的收获就是二分算法!首先,二分算法中最重要的一点就是去找那个cheak函数,也就是判断下一个边界怎么变化的条件。按照yxc总结的模板来说算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。int bsearch_1(int l, int r){ while (l < r) ...原创 2019-07-21 18:15:22 · 82 阅读 · 0 评论 -
DayTwelve 归并和快排其他代码
之前在另一篇博文里面写了七种排序的算法,其中一些在有些情况下还有bug,今天进行复盘,重新学习一下。归并排序void mergesort(int q[], int l, int r){ int tmp[1000010];//这个数组用来存放临时排好序的序列,在后面会将这个数组复制到答案中。 if (l >= r)return;//如果边界条件达到,就结束递归 int mid...原创 2019-08-03 11:02:20 · 98 阅读 · 0 评论 -
DayFive Map的使用
MapMap是STL的一个关联容器,内部采用红黑树进行实现,它提供一对一的hash。使用Map时,需包含头文件<map>,实例化一个map对象的时候,需要传入两个模板参数,其中,一个参数作为索引,另一个参数作为存入内容的类型。使用 map.size()函数获取到当前map中包含的元素个数如果存入的元素是一对,可以采用 map.first.first进行访问....原创 2019-07-26 11:44:31 · 100 阅读 · 0 评论 -
DayNine 笔记
在使用memset函数的时候,尽量将值赋为0或1.合并两个有序链表的时候,可以建两个空指针,分别遍历两个链表,比较大小之后加入答案链表struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(NULL) {}};ListNode* mergeTwoLists(ListNode* l1...原创 2019-07-31 13:40:19 · 69 阅读 · 0 评论 -
DayThirteen 笔记
使用sort函数时,可以传入第三个参数,作为排序的顺序参考,例如:bool cmp(pair<double, double> a, pair<double, double> b){ return a.second > b.second;//从大到小排序}int main(){ sort(danjia, danjia + n, cmp);}记录...原创 2019-08-04 14:50:14 · 71 阅读 · 0 评论 -
DayFourteen 字符串笔记
查找一个字符串中包含的一个重复子串可以用以下代码 while(k < s.size() && s[k] == s[j])k++;//循环结束后,K是重复字符的最后一个的下一个。如果想要按照字典序排序一个单词,可以采用sortsort(str.begin(),str.end());vector里面插入元素的时候如果想要按key插可以采用以下方法vect...原创 2019-08-05 13:28:08 · 109 阅读 · 0 评论 -
DayTen 依旧是笔记呀
c++中读取一整行数据时,可以采用String类库中的getline 函数 具体使用 getline(cin,str),这样读入的数据就是包含输入的空格,方便后续的操作。以下这一点代码,可以将输入的字符按空格分割放入栈中 stack<string> stk; string str = " "; getline(cin, str); string temp = "";...原创 2019-08-01 13:42:31 · 121 阅读 · 0 评论 -
DayTwentyEight 并查集笔记
所谓并查集,就是对集合的合并和查询的操作(union&find)//并查集的模板代码class UnionFind {public: vector<int> father; UnionFind(int num) {//num表示元素个数 for (int i = 0; i < num; i++) { father.push_back(i); }...原创 2019-08-26 15:24:02 · 78 阅读 · 0 评论