自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (2)
  • 收藏
  • 关注

原创 191215题(01背包)

01背包问题有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?Vi表示第 i 个物品的价值,Wi表示第 i 个物品的体积,定义V(i,j):当前背包容量 j,前 i 个物品最佳组合对应的价值,同时背包问题抽象化(X1,X2,…,Xn,其中 Xi 取0或1,表示第 i 个物品选或不选)。j<w(i) V(i,j)=V(i-1...

2019-11-30 14:07:45 140

原创 191214题

思路:感觉就是按正常判断,写下去就可以了。#include<iostream>using namespace std;class Solution {public: bool isNumeric(char* string) { if (string == NULL || *string == '\0') return false; if (*string ...

2019-11-29 16:35:27 101

原创 求1+2+...+n

思路:利用条件与&&的短路原则,即在第一个条件语句为false的情况下不会去执行第二个条件语句,这样就做到了不会继续递归下去#include<iostream>using namespace std;class Solution {public: int Sum_Solution(int n) { int ans = n; ans&&am...

2019-11-29 14:25:10 121

原创 191212题

思路:#include<iostream>using namespace std;class Solution {public: double Power(double base, int exponent) { if (isEqual(base, 0.)) return 0.; unsigned int absExponent = 0; if (exp...

2019-11-28 20:41:55 131

原创 191211题(数组中只出现一次的数字)

思路:1.将数组的所有元素异或得到的结果为不存在重复的两个元素异或的结果(很容易理解,如果数组中的所有数字都出现了偶数次,那么所有元素异或的结果一定为0);2.两个不相等的元素在位级表示上必定会有一位存在不同;3.任何数和0异或的结果都是它本身;个人分析如下:设不存在重复的两个元素分别为a和b,那么a^b的结果就是数组中所有元素异或的结果;从最低位开始,找出a^b结果中的第一个“1”...

2019-11-28 17:22:27 130

原创 数组中的逆序对(归并排序)

题目:数组中的逆序对思路:典型的归并排序(很好的题目)这是一个归并排序的合并过程,主要考虑合并两个有序序列时,计算逆序对的个数!对于两个升序序列,设置两个下标(前下标和后下标),初始化为前序列第一个数字的下标和后序列第一个数字的下标。如果前下标对应的值大于后下标对应的值,则有“前序列剩下的长度”个逆序对(即mid - first_start + 1个),否则这不构成逆序对。然后把较大值...

2019-11-27 16:16:33 252

原创 191209题

思路:设定1、10、100、1000…为中间点,依次求个位为1、十位为1、百位为1…的次数,累加起来就是1出现的总次数。根据设定的位置i(i=1、10、100…)对n进行分割,可以分为两部分,高位为a=n/i,低位为b=n%i。当i=100时,求百位为1的次数,分类讨论:①若百位对应的数字大于1,设n=71343,那么a=713,b=43。此时百位为1的次数有a/10+1=72次(00~...

2019-11-26 22:02:34 122

原创 C++用new创建二维数组的方法

方法一:使用常量接上:如果将b(即列数)指定为一个常量,例如new int[a][5],其实质与new int[a]创建一个动态数组并无多大区别——只是元素类型由int变为了’int[5]'而已。示例代码:用这个方法来创建二维数组,比较直观、易用,但它最大的限制在于:你必须在编译时确定b的大小;int main(void){ int n = 2; int(*array_2D)[3] ...

2019-11-25 22:27:42 2541

原创 191208题(最大正方形)

思路:动态规划问题1.设二维数组dp[m][n],其中dp[i][j]表示以坐标(i,j)为正方形右下角元素时的最大正方形的边长。2.当前点的最大正方形边长为上,左,左上三个点最大正方形边长的最小值+1,也就是从这个点往这三个方向进行延伸,延伸的长度为上,左,左上三个点最大正方形边长的最小值+1。即核心递推式为:dp[i][j] = min(dp[i-1][j], dp[i][j-1],...

2019-11-25 14:27:43 262

原创 191207题

leetcode第63题思路:在之前题的基础上,矩阵增加了障碍物,这里只需要对障碍物进行判断即可,如果当前位置是障碍物的话,则数组中记录当前位置的答案就是0,即没有任何一条路径能够到达当前位置。class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& obstacl...

2019-11-24 23:36:59 106

原创 191206题

sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错。 因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数。静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,无须创建任何对象实例就可以访问。同时静态成员函数不可以调用类的非静态数据成员。to_string() 可以将int...

2019-11-24 22:23:41 129

原创 191205题

思路:按位保存数字出现次数,每抓一张牌更新一次最大值和最小值,超出范围(即max-min>=5)一定不是顺子。#include<iostream>#include<vector>using namespace std;class Solution {public: bool IsContinuous(vector<int>numbers) ...

2019-11-24 22:00:22 115

原创 191204题

思路:第一步:定义dp[i][j]的含义为:当字符串word1的长度为i,字符串word2的长度为j时,将word1转换为word2所使用的最少操作次数为dp[i][j];第二步:找关系式1.如果word1的第i个(即最后一个)字符和word2的第j个(即最后一个)字符相同,这时不需要进行任何操作,即dp[i][j]=dp[i-1][j-1];2.如果word1的第i个(即最后一个)字符...

2019-11-23 23:58:10 114

原创 191203题

和前面一题类似,唯一不同的就是数组元素间的关系式变了:dp[i][j]=min{dp[i-1][j],dp[i][j-1]}+arr[i][j];然后再找出初始值:i或j任意一个为0,都不能使用上述关系式;dp[0][j]=dp[0][j-1]+arr[0][j];dp[i][0]=dp[i-1][0]+arr[i][0];代码如下(直接在grid上改):#include<i...

2019-11-23 22:47:48 128

原创 191202题

leetcode第62题动态规划(dp)问题思路:第一步:定义数组元素的含义定义dp[i][j]的含义为:当机器人从(0,0)走到(i,j)这个位置时,一共有dp[i][j]种路径。那么所求问题的解就是dp[m-1][n-1].第二步:找出关系数组元素间的关系式机器人有两种方式到达(i,j)这个位置;一种是从(i-1,j)这个位置走到(i,j);另一种是从(i,j-1)这个位置走到...

2019-11-22 21:44:44 150

原创 191201题

反转链表思路:很简单,使用三个指针,只要在遍历旧表的某个结点时先保存当前结点的下一结点,然后再反向连接即可。#include<iostream>using namespace std;struct ListNode { int val; ListNode*next; ListNode(int x = -1) :val(x), next(NULL) {}};//太简单...

2019-11-22 20:22:43 133

原创 191130题

思路:1.把abc反转;2.把XYZdef反转,此时字符串变为cbafedZYX;3.把整个字符串反转。#include<iostream>#include<string>using namespace std;//注意形参传递方式,养成好习惯class Solution {public: string LeftRotateString(string ...

2019-11-22 20:18:05 131

原创 191129题

#include<iostream>#include<vector>#include<deque>using namespace std;class Solution {public: vector<int>maxInWindows(const vector<int>&num, unsigned int windo...

2019-11-22 12:48:38 98

原创 191128题(机器人的运动范围(回溯))

思路:和矩阵中的路径那道题相似,甚至稍微简单了一点,仍然是回溯问题。#include<iostream>using namespace std;class Solution {public: int movingCount(int threshold, int rows, int cols) { int count = 0; if (threshold <=...

2019-11-20 23:03:59 174

原创 191127题(矩阵中的路径(回溯))

34的矩阵如下:a s ab f dc c ee s e思路:这是典型的回溯问题(还是从最底层(最简)的递归入手)。先在43矩阵中找到与字符串首字符相同的矩阵元素ch(找不到就返回false),找到ch后就会触发4个新的子递归,依次遍历ch上、下、左、右的字符。如果ch上、下、左、右的字符有和字符串下一个字符相同的,那么就把那个字符当做下一次遍历的起点,然后继续触发新的4个子递归;...

2019-11-19 23:28:32 120

原创 191126题

统计一个数字在排序数组中出现的次数。思路:二分法。#include<iostream>#include<vector>using namespace std;class Solution {public: int GetNumberOfK(vector<int>data, int k) { int length = data.size();...

2019-11-17 14:07:03 192

原创 191125题

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路:1.在字符串尾部追加一个空...

2019-11-17 09:41:15 185

原创 191124题

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!思路:双指针+滑动窗口#include<io...

2019-11-16 23:02:12 153

原创 191123题(约瑟夫环)

思路1(说实话,技巧性太强,难想):编号无序转换为编号有序,找映射关系n个人的环,固定数为m;易知第一个人(编号一定是(m%n-1)) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m%n的人开始):k k+1 k+2 … n-2,n-1,0,1,2,… k-2,并且下一轮 从k开始报0。解释一下上面为什么f(n)=f’(n-1):因为从n个数(编号有序排列0 1 2 ...

2019-11-14 21:42:06 144

原创 191122题

思路:典型的双指针问题,一个指针指向数组首元素,另一个指针指向数组尾元素,两边夹击即可。不要被题目误导了!证明如下:输出两个数的乘积最小的。这句话的理解?假设:若b>a, 且存在:a + b = s;(a - m) + (b + m) = s则:(a - m)(b + m) = ab - (b - a)m - m*m < ab;说明外层的乘积更小,即找到的第一对符合要...

2019-11-14 10:43:55 114

原创 计算数组的长度(小细节)

#include<iostream>using namespace std;void cal(int *a){ cout << sizeof(a) / sizeof(int) << endl;}int main() { int a[] = { 1,2,3,4,5 }; cout << sizeof(a) / sizeof(int) &...

2019-11-14 09:49:02 1213

原创 191121题

题目:斐波那契数列思路:不能自上而下用递归,因为会重复计算一些子问题,如计算f(10)会用到f(9)和f(8),计算f(9)会用到f(8)和f(7),可见f(8)被重复计算了。所以应该使用动态规划,动态规划会把子问题的解缓存起来,从而避免重复求解子问题。故这里使用自下而上,首先根据f(0)和f(1)计算出f(2),再根据f(1)和f(2)计算出f(3)。相比于自上而下,,每次只需要储存前两...

2019-11-13 20:00:59 166

原创 191120题

思路:根据丑数的定义,丑数应该是另一个丑数乘以2、3、5的结果,假设数组中已经有若干个排序好的丑数,如数组初始化为1,2,3,4,5,6,接下来的下一个丑数一定是数组中所有元素分别乘以2,乘以3,乘以5后的最小值。以乘以2为例,为了提高效率,其实每次不用都把所有丑数都乘以2,初始化数组1,2,3,4,5,6时,可以设置一个下标索引t2,下标对应的元素需要满足:①.2*res[t2]>...

2019-11-13 16:59:01 123

原创 191119题

题目:不用加减乘除做加法。思路:转换为二进制,分三步走。第一步:不考虑进位对每一位相加。0+0=0,1+1=0,1+0=1,0+1=1,即用异或运算就可以解决。第二步:考虑进位,只有当1+1时会向前产生一个进位。这时可以想象成两个数先进行按位与,然后再左移一位。第三步:把前两步的结果相加(即开始递归),直到最终结果不产生进位(即两个数先进行按位与,然后再左移一位后的结果为0)为止。/...

2019-11-12 21:25:19 142

原创 复杂链表的复制(分成三个部分就很简单了)

原始思路(最容易想到):1.先把原始链表中每个结点都复制,并通过next指针把复制结点连接起来。(特别简单)2.然后每个结点设置random指针,这里对于一个含有n个结点的链表,由于定位每个结点的random都需要从链表头结点开始经过O(n)时间找到,所以总的时间复杂度为O(n²)。改进的思路:第一步:在原始链表的每个结点N后添加当前结点的copy,并把它们连接起来。第二步:设置复...

2019-11-12 14:39:41 239

原创 191117题

首先我们知道,计算机以补码的形式存储的,正数的补码是原码不变,负数的补码是原码的取反加1。对于8位有符号数(-128~ 0~127):+127,原码0111 1111对于-128我们来看,-128是个特殊的数,不用考虑符号位!若字长为1byte,因有一位是符号位,所以原码能表示数值的范围为(-127~ -0 ,+0~ 127)共256个。注:在补码中用(-128)代替了(-0),所以补码的...

2019-11-11 22:44:39 314

原创 191116题

当n = 1 时, 只有一种跳法,即1阶跳:Fib(1) = 1;当n = 2 时, 有两种跳的方式,1阶跳和2阶跳:Fib(2) = 2;到这里为止,和普通跳台阶是一样的。当n = 3 时,有两种跳的方式,第一次跳出1阶后,对应Fib(3-1)种跳法; 第一次跳出2阶后,对应Fib(3-2)种跳法;Fib(3) = Fib(2) + Fib(1) = 3;当n = 4时,有两种方式:...

2019-11-11 19:31:54 100

原创 191115题

分析:用Fib(n)表示跳上n阶台阶的跳法数。如果按照定义,Fib(0)肯定需要为0,否则没有意义。但是我们设定Fib(0) = 1;n = 0是特殊情况,通过下面的分析就会知道,强制令Fib(0) = 1很有好处。ps. Fib(0)等于几都不影响我们解题,但是会影响我们下面的分析理解。当n = 1 时, 只有一种跳法,即1阶跳:Fib(1) = 1;当n = 2 时, 有两种跳的方式,一阶...

2019-11-11 18:35:03 114

原创 191114题

题目:按之字形打印二叉树思路:两个栈,一个用在当前行,一个用在下一行;stack<TreeNode*>s[2];//s[current]、s[next]两个栈int current = 0;int next = 1;//current、next均在0、1之间切换(next为0表示从左到右,next为1表示从右到左)1.初始化把根结点压入s[current]2.我们在打...

2019-11-10 20:32:41 167

原创 191113题

题目:分行从上到下打印二叉树。思路:需要两个变量,一个变量nums_toBePrinted表示在当前层中还没有打印的结点数;另一个变量nums_of_nextlevel表示下一层结点的数目。1.把根结点插入队列。初始化nums_toBePrinted = 1;nums_of_nextlevel = 0;2.每次从队列的头部弹出一个元素...

2019-11-10 19:36:36 144

原创 191112题

题目:不分行从上到下打印二叉树,同一层的结点按照从左到右的顺序打印。思路:1.先把头结点的值插入队列的末尾;2.每次打印一个结点(即从队列的头部弹出一个元素)时,如果该结点有子结点,则把该结点的左、右子结点依次插入队列的末尾。接下来从队列的头部取出下一个要打印的结点,重复之前的操作。直到队列里所有结点都被打印出来为止(即队列为空)。#include<iostream>#in...

2019-11-10 18:56:59 121

原创 191111题

#include<iostream>using namespace std;struct TreeNode { int value; TreeNode*left; TreeNode*right; TreeNode(int x = 0) :value(x), right(NULL), left(NULL) {}};class Solution {public: v...

2019-11-10 17:21:09 125

原创 191110题

由于pTaIilOfList指针是全局更新的,所以使用二重指针做函数形参。#include<iostream>using namespace std;struct TreeNode { int value; TreeNode*left; TreeNode*right; TreeNode(int x = 0) :value(x), left(NULL), right(N...

2019-11-10 15:01:29 211

原创 191109题

题中规定空树不是任何树的子结构。思路:第一步:在树A中找到和树B的根结点的值相同的结点R;第二步:判断树A中以R为根结点的子树是否包含和树B完全相同的结构。#include<iostream>using namespace std;struct TreeNode { int value; TreeNode*left; TreeNode*right; TreeNod...

2019-11-09 11:50:49 129

原创 191108题

找到规律后,我写的代码如下:(这题我觉得和已知二叉树的前序遍历序列和中序遍历序列重建二叉树的题思路类似!!)#include<iostream>#include<vector>using namespace std;struct TreeNode { int value; TreeNode*left; TreeNode*right; TreeNode(...

2019-11-08 21:48:39 285

java基础 综合项目代码

java基础 综合项目

2020-12-21

epoll反应堆.zip

epoll反应堆.zip

2020-06-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除