C++
文章平均质量分 92
MaloFleur
这个作者很懒,什么都没留下…
展开
-
C++如何知晓内存中存的是地址而不是值
借鉴某Q群大佬的解答,若有不当之处还望指出C++有个让人又爱又恨的东西,指针,指针在内存中本身存的是一个地址,而再根据这个地址找到实际的值那么有个疑问:计算机怎么知道,内存中这块区域存的是地址还是值呢?毕竟两者都是十六进制数首先,计算机是不知道这件事的,所有数据本质上都是二进制 根据你定义的类型来解释的,计算机把指令寄存器指向的内容当作指令,把数据寄存器的东西当成数据程序的加载启动是由操作...原创 2019-09-23 23:27:56 · 490 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 146
1128. Number of Equivalent Domino Pairs给定一个二维数组,判断其中相同元素的个数相同元素的定义:若对于下标i、j,有dominoes[i] = [a, b], dominoes[j]=[c, d]原创 2019-07-21 12:44:29 · 203 阅读 · 0 评论 -
数论分块证明与例题
证明:例题:1257: [CQOI2007]余数之和本质是求∑i=1n(k%i)=∑i=1n(k−i∗⌊ki⌋)=nk−∑i=1n(i∗⌊ki⌋)\sum_{i=1}^n(k \% i)=\sum_{i=1}^n(k-i*\lfloor{\frac{k}{i}}\rfloor)=nk-\sum_{i=1}^n(i*\lfloor{\frac{k}{i}}\rfloor)∑i=1n(k%...原创 2019-07-24 20:56:36 · 585 阅读 · 0 评论 -
leetcode中一些经典动态规划题(不定期更新)
115. Distinct Subsequences状态转移方程:dp[i][j]={dp[i][j−1],s[j]!=t[i]dp[i][j−1]+dp[i−1][j−1],s[j]==t[i]dp[i][j]=\begin{cases}dp[i][j - 1],\qquad\qquad\qquad\qquad\quad s[j] !=t[i] \\\\dp[i][j - 1] + ...原创 2019-07-19 22:13:41 · 2424 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 144
1108. Defanging an IP Address很简单的一道题,遍历字符串,给所有的'.'加方括号class Solution {public: string defangIPaddr(string address) { string s = ""; for(int i = 0; i < address.length(); ++i)...原创 2019-07-07 12:42:59 · 390 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 143
1103. Distribute Candies to People给定两个整数,分别表示糖果数和人数,按顺序给第i个人分配i+1个糖果,若第二个循环,则给第i个人i + 1 + N个糖果返回最后每个人拥有的糖果数直接初始化整个数组,然后遍历一遍即可class Solution {public: vector<int> distributeCandies(int c...原创 2019-06-30 15:46:31 · 243 阅读 · 0 评论 -
Leetcode进阶之路——Biweekly Contest 3
Two Sum Less Than K给定一个整型数组和K,选取数组中的两个数使其和最接近K先对原数组排序,头尾指针遍历,找到第一个小于K的数即可,实时更新最接近K的值#define fo(i, a, b) for(int i = a; i < b; ++i)class Solution {public: int twoSumLessThanK(vector<...原创 2019-06-30 14:25:04 · 311 阅读 · 0 评论 -
Leetcode进阶之路——Biweekly Contest 4
这大概是打过最简单的一次leetcode…都不用赛后总结直接写博了1118 Number of Days in a Month给定年份Y和月份M,返回这一年这一月共有多少天"难点"就是闰年二月的判断了,直接给代码:class Solution {public: int numberOfDays(int Y, int M) { if(M == 2) ...原创 2019-07-13 23:01:19 · 431 阅读 · 0 评论 -
KMP算法递归部分解析
关于KMP算法,比较难以理解的一部分应该是构造next数组:void GetNext(char* p,int next[]){ int pLen = strlen(p); next[0] = -1, next[1] = 0; int k = -1; for(int j = 1; j < pLen; ++j) { int k =next[j]; while(k >=...原创 2019-07-03 15:49:10 · 346 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 142
https://leetcode.com/problems/statistics-from-a-large-sample/给定一个长为255的整型数组count, count[k]表示下标为k的数字出现了count[k]次求所有数的最小值、最大值、均值、中位数以及众数遍历的同时记录即可,对这几个概念理解基本就OKclass Solution {public: vector<...原创 2019-06-23 21:31:06 · 374 阅读 · 0 评论 -
Leetcode进阶之路——Target Sum / Maximum Sum
494. Target Sum给定一个非负数组,只通过加法和减法,有多少个算式能够得到target sum这里用到了一个tricks(Java (15 ms) C++ (3 ms) O(ns) iterative DP solution using subset sum with explanation):把原数组分为两部分,一部分求和另一部分求差,则可以得到下式: ...原创 2019-06-21 20:59:04 · 344 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 148
1144. Decrease Elements To Make Array Zigzag给定一个数组,只能采用减一操作,判断最多需要减多少次,使得数组内数字满足zigzag array,即中间元素比两边大或中间元素比两边小既然最后的结果只有两种,即中间大或中间小,那么分别对两种情况进行计算,取小值即可class Solution {public: int calcuRe...原创 2019-08-04 18:18:11 · 283 阅读 · 0 评论 -
堆排序的理解与递归实现(带注释C++)
首先要明确最大堆一定是一棵完全二叉树,即父节点(从1开始)与子节点 (若存在) 的编号关系为left = 2 * parentright = 2 * parent + 1代码实现:#include <iostream>#include <vector>using namespace std;#define fo(i, a, b) for(int i = a...原创 2019-08-05 21:55:11 · 416 阅读 · 0 评论 -
逐行打印螺旋矩阵(O(1)空间 C++附解析)
最近听面试的同学考到了这道题,事先保存后打印的方法应该都会,或者搜一下有一大堆的,保存方向进行循环即可但逐行打印的却较少,挺有趣也挺绕的首先明确:设边长为n;则最外圈有4 * (n - 1)个数;此外圈有4*(n - 3)个数,以此类推因此可以先构造一个数组,保存到该圈之前,已有多少数字此外,对于如下O(i, j)所在位置,如何判断其属于第几个圈呢?* * * * * ** x * ...原创 2019-08-14 20:21:18 · 884 阅读 · 0 评论 -
关于C++函数返回指针的情况
本文理解借鉴为什么不可以返回局部变量的指针首先要明确,局部变量的指针,与局部指针变量的区别局部变量的指针,若非static,则作用域仅为函数本身,在return之后即被释放,也即指针指向一个无效变量,因此不合理而局部指针变量则不同,尽管指针变量本身的生命期在return之后也结束,但只要其指向对象有效,其地址也是有效的开头链接中提到例子://例1int *f1(){ int x...原创 2019-09-17 22:03:27 · 10861 阅读 · 1 评论 -
从计算器理解工厂模式(C++)
对于计算器的实现,面向过程的方案就不说了,在面试过程中如果遇到,大概率是与设计模式结合,那么首先给出简单工厂的实现:#include <iostream>using namespace std;class Operator{private: double numa, numb;public: void setA(double x) { numa = x; } voi...原创 2019-09-16 21:02:30 · 353 阅读 · 0 评论 -
VS2017 查看类内存布局
在学习类、虚函数、虚继承时,往往需要通过查看类结构在内存中的布局、占用空间大小来辅助理解vs则提供了相应的功能,依次右键解决方案→属性→C/C++→命令行,在其它选项中输入/d1 reportAllClassLayout即可查看类的内存布局,支持查找功能,对于自定义的类,通过Ctrl+F可直接定位...原创 2019-09-14 14:59:51 · 1968 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 153
1184. Distance Between Bus Stops给定一个distance数组,distance[i]表示从i到i(+1) % n的距离,返回从start 到 destination的最短路径由于必定是一个环,因此有两种路径,顺时针和逆时针先用一个前缀和判断某个方向(如顺时针),用总距离与之相减即为另一方向的距离,返回两者中较小值class Solution {publi...原创 2019-09-08 15:14:18 · 173 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 152
1175. Prime Arrangements给定一个整数,将1~n的所有数放在a[1] ~ a[n]上,使得素数的下标也是素数,求共有多少种放置方案求出1~n中有多少素数,假设为k个,则只要求Akk∗An−kn−kA_k^k*A_{n-k}^{n-k}Akk∗An−kn−k即可,即分别对素数全排列, 对非素数全排列class Solution {public: int prim...原创 2019-09-01 19:38:49 · 162 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 150
1160. Find Words That Can Be Formed by Characters给定一个单词数组words和一个字符串chars,若数组中的单词能由chars中的字母构成,则为good word返回所有good word的长度之和先用一个哈希表存储chars中所有字母出现的个数,之后遍历words,判断每个word是否都在chars中出现过,且出现次数小于等于chars...原创 2019-08-18 13:45:24 · 230 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 151
1169. Invalid Transactions给定一串交易记录,每条记录由[name, time, amount, city]组成,若t[i].amount>1000或(t[i].name = t[j].name && t[i].city != t[j].amount && abs(t[i].time - t[j].time) <= 60),则...原创 2019-08-25 22:04:34 · 155 阅读 · 0 评论 -
C++ 多继承时内存布局及内存占用布局分析
给出如下的类定义:class A{};class B{ int bi; virtual void func0() { }};class C{ char c; int ci; virtual void func() { } virtual void func1() { }};class D : public A, public C{ int di; ...原创 2019-08-20 15:52:27 · 1290 阅读 · 3 评论 -
Leetcode进阶之路——Weekly Contest 149
1154. Day of the Year给定一个字符串日期,返回该天是该年的第几天首先把字符串按年月日拎出来,判断是否为闰年,最后求和即可class Solution {public: int strtoInt(string s) { int begin = 0; for (int i = 0; i < s.length(); ++i) if (s[i] ...原创 2019-08-11 14:39:39 · 292 阅读 · 0 评论 -
如何定义一个只能在堆上(栈上)生成对象的类
链接:如何定义一个只能在堆上(栈上)生成对象的类来源:牛客网 在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。动态建立类对象,...转载 2019-08-10 20:43:13 · 712 阅读 · 0 评论 -
Maximum Sum Rectangular Submatrix in Matrix dynamic programming/2D kadane
本文是对 Maximum Sum Rectangular Submatrix in Matrix dynamic programming/2D kadane 的转述与理解给定一个矩阵,找出某个子矩阵,使该子矩阵中元素之和最大所给矩阵如下图,并初始化maxSum = 0, curaccumulateSum表示当前各行累加的值第一轮,L和R均从第0列开始遍历,当前累加值为[2, 0, 2, -3...原创 2019-06-21 10:28:28 · 415 阅读 · 0 评论 -
Leetcode进阶之路——Biweekly Contest 2
Sum of Digits in the Minimum NumberGiven an array A of positive integers, let S be the sum of the digits of the minimal element of A.Return 0 if S is odd, otherwise return 1.Example 1:Input: [3...原创 2019-06-16 16:04:10 · 261 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 141
1089. Duplicate Zeros给定一个整型数组,若遇到0,则将其重复一遍,剩下数字后移一位,在原数组上进行操作直接新开一个数组,遍历一遍,同时判断是否为0,最后替换原数组即可class Solution {public: void duplicateZeros(vector<int>& arr) { vector<int> res;...原创 2019-06-16 15:06:06 · 386 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 127
1005. Maximize Sum Of Array After K NegationsGiven an array A of integers, we must modify the array in the following way: we choose an i and replace A[i] with -A[i], and we repeat this process K tim...原创 2019-03-10 13:42:21 · 189 阅读 · 0 评论 -
Leetcode进阶之路——并查集
关于并查集的基础理解,网上已有很多,推荐这篇博客并查集讲得很细,个人认为对理解很有帮助,而我这里则单纯举个例子帮助理解:一个班有26个人,分别用A~Z标记假设:如果A和B是朋友,B和C是朋友,那么A和C也是朋友(间接的),于是A、B、C三个人组成了一个小圈子,这时候如果D和B也是朋友,那么ABCD四个人就是一个小圈子那么怎么判断这若干人是否同属于一个圈子呢?先设置一个数组pre[N],其...原创 2019-01-23 17:26:07 · 4579 阅读 · 1 评论 -
少玩游戏多种树——红黑树
写在前面:1. 关于红黑树,其实工作中并不会让你去构造以及实现如何增删节点,因为无论是C++还是Java,都封装了相应的数据结构(如map、set等),内部用的就是红黑树,但我们需要知道这有什么优点,解决了什么问题,以及在什么情况下用该数据结构,提高效率2. 红黑树也是平衡二叉树的一种,相比AVL树,红黑树的规则更宽松,AVL树严格要求平衡因子之差小于2,因此在查找频繁时,AVL树更优,而在...原创 2019-01-31 23:47:04 · 313 阅读 · 0 评论 -
Leetcode进阶之路——Balloons
最近做了两道扎气球的题,都很有意思,特别是第二道,用到了动态规划,第一次看见还是有些难度的,现将其记录如下。452.Minimum Number of Arrows to Burst BalloonsThere are a number of spherical balloons spread in two-dimensional space. For each balloon, provi...原创 2018-10-13 22:53:05 · 211 阅读 · 0 评论 -
Leetcode进阶之路——Trie(Prefix Tree)
关于前缀树的介绍网上已有很多文章,简单的说,这是一种典型的“空间换时间”的数据结构 前缀树可构造如下:class TrieNode{ int val; TrieNode* children[num]; bool flag;public: TrieNode() { val = 0; memset(children,...原创 2018-09-12 14:08:45 · 898 阅读 · 0 评论 -
Leetcode进阶之路——Rotate Image
这道题题面简单,类似于矩阵转置,按照钟表的顺时针方向选择90度,自己先画个简单的图: 矩阵的阶数为4,于是可以得到以下规律:a00 = a30a01 = a20a21 = a22 · · ·即:a[i][j] = a[n-1-i][j](n为阶数) 于是就得到如下代码:class Solution {public: void rotate(vector<原创 2017-04-24 10:19:32 · 472 阅读 · 0 评论 -
Codewars进阶之路——Getting along with Integer Partitions(DFS)
这道题原意是输入一个整数,然后将其分解为若干个数字的和,例如:5 = 55 = 4 + 1 · · ·5 = 1 + 1 + 1 + 1 + 1于是这样就形成了一个集合:enum(5)-> [[5],[4,1],[3,2],[3,1,1],[2,2,1],[2,1,1,1],[1,1,1,1,1]]接下来计算每个子集合的积(product),并去重、排序,于是得到:prod(5) -原创 2017-03-20 22:01:14 · 1135 阅读 · 0 评论 -
Codewars进阶之路——Fun with trees: array to tree
题意大概也就是给你一个向量,然后创建一个完全二叉树 之前不管什么二叉树的创建都是直接用递归,简单又快捷,同样如果只是针对这个结果也能很快写出对应的代码 先贴出我自己的TreeNode类:class TreeNode {public: int m_value; TreeNode* m_left, *m_right; TreeNode(int value, TreeNode原创 2017-03-09 22:11:10 · 632 阅读 · 0 评论 -
Codewars进阶之路——Factorial tail
题意大概是输入两个数m,n,分别表示进制数(≤256)和底数(≤1000000),求n的阶乘在m进制的表示下最后有几个0 最容易想到的方法如下:int Zeroes (int base, int number){ int f; for (f = 1; number > 1; f *= number--); int z = 0; while (f % base ==原创 2017-03-19 21:26:12 · 750 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 128
1012. Complement of Base 10 IntegerEvery non-negative integer N has a binary representation. For example, 5 can be represented as “101” in binary, 11 as “1011” in binary, and so on. Note that exce...原创 2019-03-17 18:44:57 · 374 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 129
先吐槽一下leetcode周赛时间又变了… 等进去的时候才发现都快结束了= =1020. Partition Array Into Three Parts With Equal SumGiven an array A of integers, return true if and only if we can partition the array into three non-empty ...原创 2019-03-24 14:07:01 · 353 阅读 · 3 评论 -
Leetcode进阶之路——Weekly Contest 130
1017. Convert to Base -2Given a number N, return a string consisting of "0"s and "1"s that represents its value in base -2 (negative two).The returned string must have no leading zeroes, unless the...原创 2019-03-31 18:14:41 · 199 阅读 · 0 评论 -
Leetcode进阶之路——Weekly Contest 140
5083. Occurrences After BigramGiven words first and second, consider occurrences in some text of the form “first second third”, where second comes immediately after first, and third comes immediatel...原创 2019-06-09 23:00:10 · 289 阅读 · 0 评论