自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 问答 (1)
  • 收藏
  • 关注

原创 哈希表

模拟散列表维护一个集合,支持如下几种操作:“I x”,插入一个数x;“Q x”,询问数x是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为”I x”,”Q x”中的一种。输出格式对于每个询问指令“Q x”,输出一个询问结果,如果x在集合中出现过,则输出“Yes”,否则输出“N...

2020-02-29 14:45:37 178

原创 手写堆

堆排序输入一个长度为n的整数数列,从小到大输出前m小的数。输入格式第一行包含整数n和m。第二行包含n个整数,表示整数数列。输出格式共一行,包含m个整数,表示整数数列中前m小的数。数据范围1≤m≤n≤105,1≤数列中元素≤109输入样例:5 34 5 1 3 2输出样例:1 2 3思路:将小根堆(完全二叉树)存储在一维数组中,假设一节点的下标是 x ,则其父节点...

2020-02-29 14:45:25 203

原创 并查集问题

合并集合一共有n个数,编号是1~n,最开始每个数各自在一个集合中。现在要进行m个操作,操作共有两种:“M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;“Q a b”,询问编号为a和b的两个数是否在同一个集合中;输入格式第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为“M a b”或“Q a b”中的一种。输出格式对于...

2020-02-29 14:45:11 212

原创 区间和问题

区间和假定有一个无限长的数轴,数轴上每个坐标上的数都是0。现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。近下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。输入格式第一行包含两个整数n和m。接下来 n 行,每行包含两个整数x和c。再接下里 m 行,每行包含两个整数l和r。输出格式共m行,每行输出一个询问中所求的区间...

2020-02-29 14:42:38 920

原创 二叉搜索树的后序遍历序列

二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。样例输入:[4, 8, 6, 12, 16, 14, 10]输出:trueclass Solution {public: vector<int> seq; bool verify...

2020-02-28 20:46:54 100

原创 复杂链表的复刻(剑指offer)

复杂链表的复刻请实现一个函数可以复制一个复杂链表。在复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个额外的指针指向链表中的任意结点或者null。注意:函数结束后原链表要与输入时保持一致。/** * Definition for singly-linked list with a random pointer. * struct ListNode { * int ...

2020-02-28 20:11:39 149

原创 数据流中的中位数(剑指offer)

数据流中的中位数如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。样例输入:1, 2, 3, 4输出:1,1.5,2,2.5解释:每当数据流读入一个数据,就进行一次判断并输出当前的中位数。class Solution {public: ...

2020-02-28 19:50:44 72

原创 数组中出现次数超过一半的数字

数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。假设数组非空,并且一定存在满足条件的数字。思考题:假设要求只能使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢?样例输入:[1,2,1,1,3]输出:1class Solution {public: int moreThanHalfNum_Solution(vector...

2020-02-28 19:49:03 115

原创 二进制中1的个数

二进制中1的个数输入一个32位整数,输出该数二进制表示中1的个数。class Solution {public: int NumberOf1(int n) { int res=0; unsigned int m=n; //在此要注意当n负数时,右移会自动补1而不是0,因此把int改成unsigned int即可 while(m) ...

2020-02-17 15:18:59 107

原创 剪绳子

剪绳子给你一根长度为 n 绳子,请把绳子剪成 m 段(m、n 都是整数,2≤n≤58 并且 m≥2)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]k[1] … k[m] 可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。样例输入:8输出:18下面我们给出证明:首先把一个正整数 NN 拆分成若干正整数只...

2020-02-17 15:06:14 164

原创 旋转数组的最小值

旋转数组的最小值把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个升序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。数组可能包含重复项。注意:数组内所含元素非负,若数组大小为0,请返回-1。样例输入:nums=[2,2,2,0,1]输出:0暴力做法class Soluti...

2020-02-16 15:44:46 349

原创 重建二叉树

重建二叉树输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。注意:二叉树中每个节点的值都互不相同;输入的前序遍历和中序遍历一定合法;样例给定:前序遍历是:[3, 9, 20, 15, 7]中序遍历是:[9, 3, 15, 20, 7]返回:[3, 9, 20, null, null, 15, 7, null, null, null, null]返回的二叉树如下所示: ...

2020-02-16 15:08:28 92

原创 不修改数组找出重复的数字

不修改数组找出重复的数字给定一个长度为 n+1 的数组nums,数组中所有的数均在 1∼n 的范围内,其中 n≥1。请找出数组中任意一个重复的数,但不能修改输入的数组。样例给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。思考题:如果只能使用 O(1) 的额外空间,该怎么做呢?暴力做法在此不做叙述,这里讲述空间复杂度O(1) 的做法此题运用...

2020-02-16 14:35:37 382 1

原创 子集(LeetCode 78)

子集(LeetCode 78)给定一个集合,包含互不相同的数,返回它的所有子集(幂集)。注意;结果不能包含相同子集。样例输入:nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]思路:将子集按二进制表示class Solution {public: vec...

2020-02-13 12:52:20 91

原创 全排列 II(LeetCode 47)

全排列 II给定一堆整数,可能包含相同数,返回其所有不同的全排列。样例输入:[1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]算法思路因为序列中存在相同的数,故枚举顺序和简单的全排列不同1、先将所有数从小到大排序,这样相同的数会排在一起;2、从左到右依次枚举每个数,每次将它放在一个空位上;3、对于相同数,我们人为定序,就可以避免重...

2020-02-13 12:27:40 117

原创 约瑟夫问题

(圆圈中最后剩下的数字)约瑟夫问题0, 1, …, n-1这n个数字(n>0)排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。方法一 (暴力模拟)#include <list>class Solution {public: int lastRemaining(int n, int m){ list&...

2020-02-11 22:15:04 218

原创 火车进出站问题

火车进出站问题这里有n列火车将要进站再出站,但是,每列火车只有1节,那就是车头。这n列火车按1到n的顺序从东方左转进站,这个车站是南北方向的,它虽然无限长,只可惜是一个死胡同,而且站台只有一条股道,火车只能倒着从西方出去,而且每列火车必须进站,先进后出。也就是说这个火车站其实就相当于一个栈,每次可以让右侧头火车进栈,或者让栈顶火车出站。现在请你按《字典序》输出前20种可能的出栈方案。输入...

2020-02-11 21:23:18 1070

原创 复制带随机指针的链表(LeetCode 138)

复制带随机指针的链表(LeetCode 138)给定一个单链表,链表中的每个节点包含一个额外的指针,随机指向链表中的其它节点或者指向 null。请复制整个链表,并返回新链表的头结点。思路:(哈希表) O(n)用哈希表维护新旧链表节点之间的对应关系。从前往后扫描旧链表,对于每个节点的两条边(next以及random),如果新链表中对应的点还未创建,则创建节点,并将新节点与旧链表中的节点关...

2020-02-11 14:43:40 83

原创 环形链表 LeetCode.141、142

环形链表 LeetCode.141给定一个链表,判断是否存在环。进一步:能否只使用额外 O(1)的空间?算法(链表,指针扫描) O(n)用两个指针从头开始扫描,第一个指针每次走一步,第二个指针每次走两步。如果走到 null,说明不存在环;否则如果两个指针相遇,则说明存在环。假设链表存在环,则当第一个指针走到环入口时,第二个指针已经走到环上的某个位置,距离环入口还差 x 步。由于第二个...

2020-02-10 16:17:16 107

原创 旋转链表

旋转链表(LeetCode 61)给定一个链表,将链表向右循环移动 k 次,k是非负整数。样例1输入:1->2->3->4->5->NULL, k = 2输出:4->5->1->2->3->NULL解释:向右移动1步后:5->1->2->3->4->NULL向右移动2步后:4->5-&gt...

2020-02-10 15:33:09 147

原创 反转链表 II

请将链表中第 nn 个节点和第 mm 个节点之间的部分翻转。链表最多只能遍历一遍。注意:1≤m≤n≤1≤m≤n≤ 链表长度。样例输入:1->2->3->4->5->NULL, m = 2, n = 4输出:1->4->3->2->5->NULL/** * Definition for singly-linked list....

2020-02-09 23:10:16 70

原创 链表翻转 (Leetcode 206)

反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ...

2020-02-09 22:55:20 62

原创 耍杂技的牛(贪心)

耍杂技的牛农民约翰的N头奶牛(编号为1…N)计划逃跑并加入马戏团,为此它们决定练习表演杂技。奶牛们不是非常有创意,只提出了一个杂技表演:叠罗汉,表演时,奶牛们站在彼此的身上,形成一个高高的垂直堆叠。奶牛们正在试图找到自己在这个堆叠中应该所处的位置顺序。这N头奶牛中的每一头都有着自己的重量Wi以及自己的强壮程度Si。一头牛支撑不住的可能性取决于它头上所有牛的总重量(不包括它自己)减去它的...

2020-02-06 21:23:22 388

原创 分组背包问题

分组背包有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 Si,...

2020-02-02 17:12:54 141

原创 多重背包问题

多重背包问题 I有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输...

2020-02-02 16:50:32 353

原创 完全背包问题

完全背包有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输出一...

2020-02-02 16:02:16 521 1

原创 0-1背包

0-1背包有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一...

2020-02-02 15:37:04 135

原创 双指针算法思想

双指针的朴素做法(暴力枚举) 时间复杂度O(n*n)for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) .......双指针算法则是运用题目内部的具体逻辑将上述算法的复杂度降到O(n),通用模板如下:for(int i=0,j=0;i<n;i++){ while(j<i&&check(i,j)) j...

2020-02-02 09:56:02 375

原创 大数运算(高精度运算)

高精度运算1、高精度加法给定两个正整数,计算它们的和。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的和。数据范围1≤整数长度≤100000输入样例:1223输出样例:35#include<iostream>#include<algorithm>#include<vector>using namespace std;...

2020-02-01 16:54:45 688

空空如也

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

TA关注的人

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