C++
Cold_Sun_
这个作者很懒,什么都没留下…
展开
-
C++ Lambda表达式
[ capture-list ] ( params ) -> ret { body }其中( params ) -> ret定义了这个匿名函数的参数和返回类型, { body }定义了这个匿名函数的功能,捕捉列表[ capture-list ]是做什么的呢?概括地讲,它使这个匿名函数可以访问外部(父作用域)变量。以leetcode上的一个答案代码为例auto cmp = [&nums1, &nums2](pair<int, int> a, pair&l.原创 2020-09-07 17:25:32 · 472 阅读 · 0 评论 -
C++STL之最大/小堆heap简记
优先队列(priority queue)是由二叉堆(binary heap)实现的,它是一种完全二叉树(complete binary tree)。也就是说,整棵二叉树binary tree除了最底层的叶节点之外,是填满的,而最底层的叶节点由左至右又不得有空隙。完全二叉树的这个特点,给我们实现二叉堆带来了极大的便利:使用一个vector来实现这个二叉堆,寻找父节点就是该节点在数组位置/2,寻找子节点就是该节点在数组位置*2以及*2+1(呵呵,想起了最早自己用pascal实现二叉树那会)以最大堆ma原创 2020-09-07 17:14:11 · 846 阅读 · 0 评论 -
二分查找模板(转载)
原文转自https://www.acwing.com/blog/content/307/一、查找精确值从一个有序数组中找到一个符合要求的精确值(如猜数游戏)。如查找值为Key的元素下标,不存在返回-1。//这里是left<=right。//考虑这种情况:如果最后剩下A[i]和A[i+1](这也是最容易导致导致死循环的情况)首先mid = i,//如果A[mid] < key,那么left = mid+1 = i +1,如果是小于号,则A[i + 1]不会被检查,导致错误int转载 2020-06-15 00:03:29 · 257 阅读 · 0 评论 -
C++:STL容器迭代过程中删除元素技巧(转)
1.连续内存序列容器(vector,string,deque)序列容器的erase方法返回值是指向紧接在被删除元素之后的元素的有效迭代器,可以根据这个返回值来安全删除元素。vector<int> c;for(vector<int>::iterator it = c.begin(); it != c.end();){if(*it)it = c.erase(...转载 2019-10-15 22:23:51 · 445 阅读 · 0 评论 -
LeetCode:839. 相似字符串组
题目描述:如果我们交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。例如,"tars" 和 "rats" 是相似的 (交换 0 与 2 的位置); "rats" 和 "arts" 也是相似的,但是 "star" 不与 "tars","rats",或 "arts" 相似。总之,它们通过相似性形成了两个关联组:{"tars", "rats...原创 2019-10-15 22:09:57 · 373 阅读 · 0 评论 -
C++STL之散列表
散列表(哈希表)是普通数组概念的推广。在散列表中,不是直接把关键字作为数组的下标,而是根据关键字计算出相应的下标。一个散列表中重要的是他的散列函数以及解决冲突的方法。这里试着自己模仿网上STL中hash表的实现写了一个,记在这里以便以后查看。这里散列函数选择的是除法散列法,解决冲突的方法选用的是链接法,表基于vector实现。代码如下://hashtable.h#ifnde...原创 2019-10-12 15:36:07 · 1275 阅读 · 0 评论 -
LeetCode:795. 区间子数组个数
题目描述:给定一个元素都是正整数的数组A,正整数 L以及R(L <= R)。求连续、非空且其中最大元素满足大于等于L小于等于R的子数组个数。输入输出:输入:A = [2, 1, 4, 3]L = 2R = 3输出: 3解释: 满足条件的子数组: [2], [2, 1], [3].注意: L, R 和 A[i] 都是整数,范围在 [0,...原创 2019-09-12 10:33:07 · 362 阅读 · 1 评论 -
华为2020秋招笔试试题
这两天看师姐都在忙着准备秋招,自己也去做了一下今年的华为秋招笔试题。题目描述:常用的逻辑计算有And(表示为&);Or(表示为|);Not(表示为!)。其中,他们的优先级关系是Not(!)>And(&)>Or(|)。输入描述:1、测试用例中间无空格,无需考虑空格。2、测试用例表达式只会出现如下字符:“0”,“1”,“(”,“)”,“&”,...原创 2019-09-12 21:16:25 · 5708 阅读 · 0 评论 -
小米秋招笔试题
跟着师姐做了下小米的笔试题,比较简单就是主要字符串处理,下面就附上题解。第一题就是输入给你一个字符串,包含A数组、B数组、以及半径R,让你求出所有满足Ai<=Bj且R>=Bj-Ai的整数对,若不存在满足条件的Ai,则输出距离Ai最近的Bj。样例输入A={1,3,5},B={2,4,6},R=1输出(1,2)(3,4)(5,6)代码如下:#include &...原创 2019-09-12 21:32:47 · 852 阅读 · 0 评论 -
数论算法:唯一因子分解定理
这里讲一下算法中常用到的唯一因子分解定理:合数a仅能以一种方式写成如下乘积形式: a = p1^e1*p2^e2*...*pr^er 其中pi为素数,p1<p2<...<pr,且ei为正整数。例如数6000=2^4*3*5^3。证明就不讲了,网上一抓一大把,这里应用这个定理写了一个类,可以在分解合数的时候增加效率。#include <iost...原创 2019-09-17 20:13:01 · 2006 阅读 · 0 评论 -
C++之仿函数
最近再看STL源码的时候看到里面的实现用了大量的仿函数,然后上网搜集了一些关于仿函数的知识。仿函数(Functor)又称为函数对象(Function Object)是一个能行使函数功能的类。仿函数的语法几乎和我们普通的函数调用一样,不过作为仿函数的类,都必须重载 operator() 运算符。因为调用仿函数,实际上就是通过类对象调用重载后的 operator() 运算符。如果编程者要将某种...原创 2019-09-20 21:58:30 · 5300 阅读 · 0 评论 -
LeetCode:813. 最大平均值和的分组
题目描述:我们将给定的数组 A 分成 K 个相邻的非空子数组 ,我们的分数由每个子数组内的平均值的总和构成。计算我们所能得到的最大分数是多少。注意我们必须使用 A 数组中的每一个数进行分组,并且分数不一定需要是整数。样例输入输出:输入:A = [9,1,2,3,9]K = 3输出: 20解释:A 的最优分组是[9], [1, 2, 3], [9]. 得到的分数是 9...原创 2019-10-11 09:50:44 · 296 阅读 · 0 评论 -
LeetCode:1007. 行相等的最少多米诺旋转
题目描述:在一排多米诺骨牌中,A[i] 和 B[i] 分别代表第 i 个多米诺骨牌的上半部分和下半部分。(一个多米诺是两个从 1 到 6 的数字同列平铺形成的 —— 该平铺的每一半上都有一个数字。)我们可以旋转第 i 张多米诺,使得 A[i] 和 B[i] 的值交换。返回能使 A 中所有值或者 B 中所有值都相同的最小旋转次数。如果无法做到,返回 -1.输入输出:示例...原创 2019-09-10 09:02:35 · 243 阅读 · 0 评论 -
C++模板类实现编译错误: Error:undefined reference to
今天在用模板类实现一个红黑树的时候,类的声明放在.h文件中,类的实现放在.cpp文件中,红黑树类的编译都没有问题,而在调用的时候头文件#include<rbtree.h>报错:Error:undefined reference to 'RBTree',但是加上#include<rbtree.cpp>后就没有问题了。在网上搜索之后才搞明白是C++模板类的问题。下面引用那个...原创 2019-09-06 18:06:38 · 2576 阅读 · 5 评论 -
Qt学习(二)设计继承自基类的派生类
在网上看到一个自定义的动画按钮很喜欢,大部分代码都是参考该博客,于是这里也学着设计了一个继承自QWidget的派生类AnimationButton。大概思路就是重载基类QWidget里的事件(enterEvent、leaveEvent、paintEvent、mousePressEvent、mouseReleaseEvent),让鼠标进入和离开该派生类的时候能产生动画,并为其添加鼠标单击事件。...原创 2019-08-20 21:47:18 · 1860 阅读 · 1 评论 -
Qt:如何在一个类成员函数里调用主窗体里的控件
当时为新写的派生类创建了一个鼠标单击事件,希望在单击自定义控件时可以将主界面里的堆栈窗体设置在正确的页面。可以在该派生类里定义一个空的堆栈窗体指针,并在主界面里将目标堆栈窗体指针传给它。在派生类里定义函数,判断指针不为空便调用目标堆栈窗体。//派生类Animationbutton函数void Animationbutton::setStackedWidgets(QStackedWidg...原创 2019-08-20 21:57:29 · 2166 阅读 · 0 评论 -
QT学习(三)事件过滤器
在设计的过程中遇到了一个问题,我在派生类里重载了mousemoveevent,程序运行时,发现点击这个派生类时,主窗口也会接收到这个事件。解决方法:在定义的派生类中添加事件过滤器,接收到mousemoveevent事件后就将其处理不让其继续向下传递。以下为代码:先注册事件过滤器:this->installEventFilter(this);因为想要过滤的控件注册,因为我...原创 2019-08-22 21:37:01 · 492 阅读 · 0 评论 -
LeetCode:最小的必要团队
题目描述:作为项目经理,你规划了一份需求的技能清单 req_skills,并打算从备选人员名单 people 中选出些人组成一个「必要团队」( 编号为 i 的备选人员 people[i] 含有一份该备选人员掌握的技能列表)。所谓「必要团队」,就是在这个团队中,对于所需求的技能列表 req_skills 中列出的每项技能,团队中至少有一名成员已经掌握。我们可以用每个人的编号来表示团队中的...原创 2019-08-27 11:01:49 · 445 阅读 · 0 评论 -
reference to non-static member function must be called
今天在刷LeetCode一道水题的时候,遇到了报错:reference to non-static member function must be called代码如下:class Solution {public: static bool cmp(int a,int b)//问题出在这个函数 { return a<b; } vec...原创 2019-08-27 11:18:12 · 1196 阅读 · 0 评论 -
LeetCode:我的日程安排表 I
题目描述:实现一个 MyCalendar 类来存放你的日程安排。如果要添加的时间内没有其他安排,则可以存储这个新的日程安排。MyCalendar 有一个 book(int start, int end)方法。它意味着在 start 到 end 时间内增加一个日程安排,注意,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x < e...原创 2019-08-28 21:17:55 · 382 阅读 · 1 评论 -
LeetCode:731. 我的日程安排表 II
题目描述:实现一个 MyCalendar 类来存放你的日程安排。如果要添加的时间内不会导致三重预订时,则可以存储这个新的日程安排。MyCalendar 有一个 book(int start, int end)方法。它意味着在 start 到 end 时间内增加一个日程安排,注意,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x <...原创 2019-08-28 21:29:16 · 395 阅读 · 0 评论 -
error: no viable conversion from 'MyCalendar *' to 'MyCalendar'
今天用C++在实例化一个类的时候遇到了这样的报错,代码如下:MyCalendar cal=new MyCalendar();上网找了资料才发现,自己前段时间C#敲多了弄混了,C++里面new一个类的时候返回的是一个新创建的类的指针,将指针赋值给一个本地对象肯定要报错,故正确代码应该是MyCalendar *cal=new MyCalendar();还是基础不扎实的问题。...原创 2019-08-28 21:37:40 · 12121 阅读 · 0 评论 -
LeetCode:732. 我的日程安排表 III
题目描述:实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排。MyCalendar 有一个 book(int start, int end)方法。它意味着在start到end时间内增加一个日程安排,注意,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x < end。当 K 个日程安排有一些时间上...原创 2019-08-29 20:30:38 · 287 阅读 · 0 评论 -
C++:STL学习之红黑树
一、红黑树介绍引用算法导论里面的话:一颗红黑树是满足下面红黑性质的二叉搜索树:1、每个结点是红色,或是黑色的2、根结点是黑色的3、每个叶结点NIL是黑色的4、如果一个结点是红色的,则它的两个子结点都是黑色的5、对于每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点根据红黑树的这些性质,易证:一颗有n个内部结点的红黑树的高度至多为2lg(n+1...原创 2019-09-05 21:18:13 · 1921 阅读 · 0 评论 -
LeetCode:501、下一个更大元素II
题目描述:给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。输入输出样例:示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 ...原创 2019-09-06 17:45:36 · 138 阅读 · 0 评论 -
Qt学习(一)ui界面的设计
这几天初步接触了Qt,首先在学习Qt的UI界面的设计,发现Qt里面自带的那些控件与窗体显示效果都不太好,于是上网看了一些教程,也参考了一个demo界面,然后初步设计了一个ui界面。大概的设计思路是先去掉MainWindow里的边框、菜单栏以及标题栏,自己制作需要的菜单栏以及标题栏。(重载其中的窗体绘制事件paintEvent、鼠标移动事件mouseMoveEvent、鼠标按下事件mouse...原创 2019-08-20 21:35:00 · 10386 阅读 · 1 评论