数据结构
文章平均质量分 61
tzyshiwolaogongya
这个作者很懒,什么都没留下…
展开
-
leetcode109——Convert Sorted List to Binary Search Tree
题目大意:给出升序链表,根据它构建平衡二叉搜索树。分析:链表和dfs的考察。和leetcode108类似,找到链表的中间结点也就是根节点然后递归分别构建左右子树。注意巧妙的用快慢指针找到链表中间节点这一方法。代码:转载自https://www.cnblogs.com/hellowooorld/p/6624709.html TreeNode* sortedListToBST(Li...原创 2018-09-27 17:16:01 · 89 阅读 · 0 评论 -
leetcode26——Remove Duplicates from Sorted Array
题目大意:在给出的升序int数组中删除重复数字,最后返回删除后的数组长度,并且保证该长度以内的数字不重复分析:数组的考察。由于要使得最后没有重复数字长度为sum的数组满足前sum位不重复,所以要不断向前移动数字,以j指针为标准,向后找到与j处不同的数字,移动到j之后,找到了不同的数字就意味着结果数组中多了一位,所以sum+1。j处已经比较过了,所以j+1比较下一个。代码:转载自https://ww...原创 2018-04-12 15:36:14 · 76 阅读 · 0 评论 -
leetcode21——Merge Two Sorted Lists
题目大意:合并两个升序的链表分析:链表考察。逐个将两个链表中较小的结点加入新结果的尾部。代码:参考网上代码但是自己有改动class Solution { public: ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) { ListNode *result = new ListNode(0); ...原创 2018-04-09 21:17:03 · 81 阅读 · 0 评论 -
leetcode399——Evaluate Division
题目大意:给出一些除法式子,除数和被除数都是字符串形式的字母,商是浮点型实数,根据给出的信息求出提问中的值分析:图论或者哈希表+dfs。 图论:将分子分母都当做图中的结点,商作为边权,然后只需要用floyd算法算出所求的两点之间是否有路径及路径权重即可。 dfs:首先将两个vector里面的数据读出来建立哈希表,string就是哈希map的key值,...原创 2018-03-21 17:01:48 · 206 阅读 · 0 评论 -
leetcode315——Count of Smaller Numbers After Self
题目大意:给出一个数组,求出每个数字右侧比自己小的数字个数分析:分治法的应用、树状数组应用。这里分治法用的是归并排序。在归并的过程中,对于左侧数组的每个数,记录在右侧数组中比它小的数字的个数。代码:转载自https://blog.csdn.net/qq508618087/article/details/51320926class Solution {public: void...原创 2018-03-17 16:53:40 · 122 阅读 · 0 评论 -
leetcode575——Distribute Candies
题目大意:给出偶数个元素的数组,每种数字代表一种糖果,现在将糖果均等分给弟弟妹妹,问妹妹最多得到多少种糖果分析:哈希表的应用。或者直接排序遍历也可以。思路就是如果糖果种类超过总数的一半,则妹妹的糖果种类数就是种数的一半,否则妹妹能得到所有种类的糖果。代码:方法一:排序遍历class Solution {public: int distributeCandies(vector<int>&...原创 2018-03-17 13:59:51 · 107 阅读 · 0 评论 -
leetcode547——Friend Circles
题目大意:给出朋友关系二维数组,求出一共有几个朋友圈分析:并查集应用。将有关系的朋友放在同一个并查集中,最后统计根节点仍然是自己的结点有多少个就有多少个朋友圈。因为在压缩路径之后,只有每个并查集的根节点的父节点是自己。代码:class Solution {public: int father[200]; int findCircleNum(vector<vector<int>&g...原创 2018-03-16 16:55:56 · 181 阅读 · 0 评论 -
leetcode242——Valid Anagram
题目大意:问给出的两个字符串是不是由相同字母颠倒某些顺序后组成的分析:排序的应用。给两个字符串排序,排序后相等则符合条件。代码:转载自http://blog.csdn.net/fly_yr/article/details/49886391class Solution {public: //方法一:排序判断 bool isAnagram1(string s, string t) { if (s.e...原创 2018-03-16 16:07:54 · 120 阅读 · 0 评论 -
leetcode350——Intersection of Two Arrays II
题目大意:求两个数组的交集。允许有相同元素。和349类似。分析:排序的应用。可以像349一样做,下面介绍一种不同的方式,map映射(或者用哈希),注意在数组2中找到后要将相应的元素出现次数减一。代码:转载自https://www.cnblogs.com/VickyWang/p/6012786.htmlclass Solution {public: vector<int> inte...原创 2018-03-16 15:29:45 · 123 阅读 · 0 评论 -
leetcode521——Longest Uncommon Subsequence I
题目大意:找出两个字符串中最长的不相同子串的长度分析:字符串应用。注意理解题目描述,本题不是求一个字符串的子串与另一个字符串有没有公共子序列,而是第一个字符串中的子序列,这个子序列不存在于第二个字符串中即可。所以只要第一个字符不等于第二个字符串,那么它的最长子序列也就是它本身,就不是第二个字符串的子序列,所以只要返回二者中的更长就可以了。代码:转载自http://www.bubuko.com/in...原创 2018-03-15 22:25:31 · 169 阅读 · 0 评论 -
leetcode344——Reverse String
题目大意:将给出的字符串逆转分析:字符串应用。string类型取出字符时可以用数组下标,但是不能给string类型的变量按下标赋值。string的连接直接用加号。代码:class Solution {public: string reverseString(string s) { string r = ""; for (int i = s.size() - 1;i >= 0;i--) {...原创 2018-03-15 21:23:02 · 89 阅读 · 0 评论 -
leetcode657——Judge Route Circle
题目大意:问一个机器人按照所指示的方向(一个字符串)走完之后会不会回到原点。UDLR分别代表上下左右。分析:字符串应用代码:class Solution {public: int dir[4][2] = { {-1,0},{1,0},{0,-1},{0,1} }; bool judgeCircle(string moves) { int x = 0, y = 0; for(int i = 0;...原创 2018-03-15 21:02:54 · 137 阅读 · 0 评论 -
leetcode27——Remove Element
题目大意:删除数组中的指定数字分析:数组的考察。遍历数组找出非目标数字移到数组当前指针即可。代码:转载自https://blog.csdn.net/sunao2002002/article/details/46352905class Solution {public: int removeElement(vector<int>& nums, int val) { ...原创 2018-04-12 16:20:30 · 101 阅读 · 0 评论 -
leetcode28——Implement strStr()
题目大意:实现strstr函数,找出字符串needle在字符串haystack中的位置,如果并不是子串则返回-1分析:字符串的考察。注意一点,子串是空串时返回的是0。网上说有用KMP的(不懂)。。。代码:自己的代码:class Solution {public: int strStr(string haystack, string needle) { if (needle.size() == 0...原创 2018-04-12 17:17:33 · 90 阅读 · 0 评论 -
leetcode674——Longest Continuous Increasing Subsequence
题目大意:给出一个乱序的整数数组,求出其中最长的升序子数组(连续)的长度分析:数组的考察,简单遍历即可。代码:class Solution {public: int findLengthOfLCIS(vector<int>& nums) { int ans = 0; int tmp = 0; for(int...原创 2018-08-01 21:28:40 · 97 阅读 · 0 评论 -
leetcode123——Best Time to Buy and Sell Stock III
题目大意:给出每天的股票价格,最多可以进行两次的买进卖出,问经过这些天能够赚取的最大利润是多少分析:类似leetcode121,这道题可以分成两个子问题求解,从i这个位置分成两半,分别求出每一半的最大收益,让两半相加的收益最大的i就是能够取得最终最大利润的位置。代码:转载自http://blog.sina.com.cn/s/blog_a89440490102x0rj.htmlpubl...原创 2018-07-28 14:09:58 · 120 阅读 · 0 评论 -
leetcode334——Increasing Triplet Subsequence
题目大意:问所给数组是否包含长度为3的上升子序列分析:动规/双指针。LIS的应用。但是这样的时间复杂度还是很高,有点没有必要,而且空间复杂度也有O(n)。还有一种方法,只需要O(n)的时间复杂度和O(1)的空间复杂度,只需要两个指针维护数组的最小值和次小值即可,当找到比次小值大的数时就说明有一个长度为3的上升子序列。(注:题目要求遍历一次/O(n)这种的,往往都是通过设置标识变量来维护某个值从...原创 2018-07-30 19:16:25 · 281 阅读 · 0 评论 -
leetcode73——Set Matrix Zeroes
题目大意:给出一个二维矩阵,将其中为0的位置对应的行列所有数字都改成0分析:数组的考察。这道题考察如何用更小的空间复杂度求解。有三种方法,对应空间复杂度为:O(mn)、O(m+n)、O(1)。代码:方法一:O(mn)。用一个二维的标记数组来记录所给矩阵中本来就有的0。class Solution {public: void setZeroes(vector<vector<int>...原创 2018-05-16 13:39:05 · 80 阅读 · 0 评论 -
leetcode80——Remove Duplicates from Sorted Array II
题目大意:删除升序数组中的多余元素,使得数组中的每种数字重复次数不得超过两次(空间复杂度为O(1))分析:数组的考察。利用双指针,一个指针遍历原数组,另一个指针维护当前数组下标,还需要tmpNum记录数字出现次数,如果超过两次则不能计入,如果数字和之前的数字不同,则将tmpNum重新置1。代码:class Solution {public: int removeDuplicates(vector&...原创 2018-05-26 13:59:54 · 94 阅读 · 0 评论 -
leetcode57——Insert Interval
题目大意:在按照区间起点值升序排列的区间数组中插入一个新的区间,如果新区间和原区间有重叠,则合并重叠区间分析:排序的考察。可以和leetcode56一样做,将新区间插入数组之后排序,然后调用56里面的函数即可。另一种方法可以不用O(nlogn)的时间复杂度,而是在O(N)内就完成插入。方法分三步走:1.将区间终点值<新区间起点值的区间直接放入答案 2.在新区间和与新区间有重叠的老区间中找到l...原创 2018-04-28 13:54:57 · 111 阅读 · 0 评论 -
leetcode59——Spiral Matrix II
题目大意:按螺旋顺序填写n*n的二维数组分析:和leetcode54类似,比它还简单。螺旋填写二维数组即可。代码:转载自https://blog.csdn.net/u014673347/article/details/48014543class Solution {public: vector<vector<int> > generateMatrix(int n) { i...原创 2018-04-21 15:57:11 · 151 阅读 · 0 评论 -
leetcode48——Rotate Image
题目大意:将给出的二维数组顺时针旋转90°,要求不申请新的空间分析:数组考察。观察旋转90°所需要的操作,得知需要两步:沿主对角线交换对称元素—>按列交换对称元素。代码:转载自https://blog.csdn.net/fly_yr/article/details/48139675class Solution {public: void rotate(vector<vector<...原创 2018-04-20 14:40:01 · 100 阅读 · 0 评论 -
leetcode58——Length of Last Word
题目大意:输出所给字符串中最后一个单词的长度,如果没有单词输出0,注意字符串可能只由空格组成,或者最后一个单词后还有空格。分析:字符串。简单,需要注意细节。代码:class Solution {public: int lengthOfLastWord(string s) { int length = 0; int i = s.size() - 1; while (i >= 0 &...原创 2018-04-30 14:50:36 · 101 阅读 · 0 评论 -
leetcode11——Container With Most Water
题目大意:给出每个垂直于x轴的线段高度数组,问他们中的任意两条与x轴组成的容器最大盛水量是多少分析:双指针问题。两层循环暴力会超时,所以考虑从两头往中间逐渐求解。 水量取决于两边之中较矮的那一条的高度,水量=较矮的高度*两条线段在x轴的坐标之差 那么如何移动指针呢?我们假设左指针所指的高度小于右指针所指的高度。可以想到,由于水量高度最多只有较矮一侧的高度,如果向...原创 2018-04-07 13:51:23 · 116 阅读 · 0 评论 -
leetcode9——Palindrome Number
题目大意:判断一个数字是不是回文数字分析:负数不能是回文数,直接返回false即可。题目要求不占用其他空间,所以方法一不太好。代码:方法一:将x存进数组判断高低位。(自己的思路)class Solution {public:bool isPalindrome(int x) {if (x < 0) return false;int count = 0;vector&l...原创 2018-04-06 14:43:26 · 137 阅读 · 0 评论 -
刷题记录
一、动态规划背包问题:poj3624(经典01)、poj1837(01)、poj1276(多重)、poj2063(完全)考虑前i位时的最优值dp[i]:poj3267(字典匹配)、poj1260(购买珍珠)LIS:poj2533(最长上升子序列)、poj1836(凸字型士兵身高)数字三角形:poj3176(数字三角形)LCS:poj1159(添加字母变成回文串)(区间dp也可)...原创 2017-10-31 14:19:32 · 858 阅读 · 0 评论 -
poj2559——Largest Rectangle in a Histogram
题目大意:给定从左到右紧挨排列的宽度均为1的矩形,他们的底边都在一条直线上,求出这个图形中最大的矩形面积输入:(可以有很多case,输入以0结束) 矩形个数n(1i 0输出:最大矩形面积分析:单调栈的应用。如果向左向右枚举比当前矩形高的矩形肯定会超时,所以我们考虑用单调栈,遍历一次就可以解决问题。栈中元素stack[]记录矩形在原序列原创 2017-12-28 17:47:46 · 123 阅读 · 0 评论 -
poj2528——Mayor's posters
题目大意:一面墙分为若干段,现在往墙上贴海报,每张海报占据墙上的一些段,海报可以重叠,问最终露出来的海报个数(完全或者部分露出来都算)输入:(可以有很多个case) case个数 海报张数n(1 第i张海报的左起点li 右终点ri(1 i 输出:可见的海报个数分析:代码:转载自原创 2017-12-08 12:04:42 · 179 阅读 · 0 评论 -
poj2299——Ultra-QuickSort
题目大意:给出一系列数字,交换相邻数字,得到升序排列,问交换操作的最小次数输入:(可以有很多个case,输入以0结束) 第i个case的数字个数n(n < 500,000) n个数字(各占一行)(0 ≤ a[i] ≤ 999,999,999) 0输出:交换操作的最小次数分析:这种交换操作首先想到冒泡,但...原创 2017-12-02 11:35:39 · 165 阅读 · 0 评论 -
poj1182——食物链
题目大意:设一个有三类生物ABC的食物链,现在说K句话判断假话个数,这些话有两种格式:1 X Y表示XY同类,2 X Y表示X吃Y,如果满足以下三条之一就是假话,否则是真话:当前的话与前面的某些真的话冲突;当前的话中X或Y比N大;当前的话表示X吃X。假设有N个动物。输入:N K(1 D X Y(一共K行表示K句话,D=1/2)输出:假话总数分析:代码:原创 2017-12-03 11:12:28 · 131 阅读 · 0 评论 -
树状数组讲解
https://www.cnblogs.com/hsd-/p/6139376.html转载 2017-12-11 20:45:08 · 119 阅读 · 0 评论 -
poj3321——Apple Tree
题目大意:给出一颗N个节点的苹果树,每个节点只能长一个苹果,根节点标号1。苹果树一开始每个结点都有一个苹果。现在有两种操作,C x是改变某个节点(如果x节点有苹果就吃掉,如果x结点没有苹果就是长出来一个新苹果);P x是查询以节点x为根的子树有多少个苹果(包括x节点本身)输入:N(N ≤ 100,000) u v(节点编号,意思是uv两个节点之间有一条边,共N-1原创 2017-12-11 17:34:29 · 259 阅读 · 0 评论 -
poj1611——The Suspects
题目大意:n个学生分成m组,如果一个学生感染了病毒,他同组的学生就都感染了,开始时0号学生已感染,问有多少人感染输入:(可以有很多case,输入以0 0结束) 第i个case的n m( 0 第j组包含的人数k 每个学生的编号(空格分隔)输出:第i个case的感染人数分析:利用并查集(在同一个并查集中的点不能连线)。处理每个组原创 2017-12-03 10:40:30 · 139 阅读 · 0 评论 -
poj3253——Fence Repair
题目大意:农夫想将一定长度的篱笆砍成n块,每块都有指定的长度,砍长度L的篱笆花费也为L,问最小花费是多少输入:n (1 ≤ n ≤ 20,000) Li(共n行)(1 ≤ Li ≤ 50,000)输出:最小花费分析:看起来dp可以解决,但是20000肯定会超时的,所以考虑用huffman树,所有指定长度中最短的两个合并,并添加到原数据集中,这样可以保证花费最小原创 2017-12-02 22:25:09 · 107 阅读 · 0 评论 -
poj2388——Who's in the Middle
题目大意:给出奇数个奶牛的产奶量,找出他们的中位数输入:奶牛个数N(1 <= N < 10,000) 第i个奶牛的产奶量(1..1,000,000)输出:中位数分析:可以直接用sort函数,也可以用快排、归并、堆排序,但是注意不要用冒泡、选择排序、直接排序等时间复杂度为O(N²)的排序方法代码:1.快排:选数据第一...原创 2017-12-01 21:29:37 · 268 阅读 · 0 评论 -
zoj1610——Count the Colors
题目大意:给一个分成n段的木板涂色,后序涂色可能会覆盖之前的涂色,问最终露出来的颜色和他们的段数输入:(可以有很多case) n(1 第i次涂色的左端点 右端点 所涂的颜色序号(共n次涂色各占一行,所有数据的范围都是 [0, 8000])输出:(每个case的输出中间有一个空行) 最终漏出的颜色序号 涂了它原创 2017-12-10 11:02:53 · 207 阅读 · 0 评论 -
poj1936——All in All
题目大意:给出两个字符串s和t,判断s是不是t的子串(不用连续)输入:(可以有很多case) 第i个case的s t(长度不超过100000)输出:Yes/No分析:用动规的LCS消耗的空间太大了,因为列有100000个,而且只需要判断是否匹配不用开数组,所以直接暴力解决代码:转载自http://blog.csdn.net/xuezhongfenfei/a原创 2017-12-01 11:44:19 · 179 阅读 · 0 评论 -
poj3264——Balanced Lineup
题目大意:给出N个数字和Q个区间,求出每个区间内最大值和最小值之差输入:N Q (1 ≤ N ≤ 50,000) (1 ≤ Q ≤ 200,000) 第i个数(共N行) (1 ≤ height ≤ 1,000,000) 第k个区间(共Q行)输出:最值之差(共Q行)分析:ST(稀疏表)算法是解决RMQ问题的一种在线算法原创 2017-12-13 11:08:38 · 130 阅读 · 0 评论 -
poj3368——Frequent values
题目大意:给出n个不降的数,根据q个查询区间,求出每个区间内出现最频繁的那个数的出现次数输入:(可以有很多case,输入以0结束) n q(1 ≤ n, q ≤ 100000) n个数字(空格隔开,-100000 ≤ ai ≤ 100000) i j(查询区间,共q行,1 ≤ i ≤ j ≤ n)输出:区间内原创 2017-12-13 11:31:15 · 242 阅读 · 0 评论 -
poj2002——Squares
题目大意:给出平面上一些点的横纵坐标xy,求这些点能构成的正方形个数输入:(可以有很多case,输入以0结束) 第i个case的点个数n (1 第j个点的x y(x、y均不超过20000)输出:正方形个数分析:代码:转载自原创 2017-12-04 17:29:12 · 151 阅读 · 0 评论