算法
dongcl97
这个作者很懒,什么都没留下…
展开
-
RMQ问题之ST算法 C++实现
Problem题目链接SolutionRMQ(Range Minimum / Maximum Query)问题是指给定一个数组,有很多的query,问你该数组[i,j]区间里的极大/小值是多少。注意,该问题的难点在于很多query,因此对每一个query都进行遍历求最值的暴力算法肯定不行对于给定数组,并不会更新数组的RMQ问题,我们可以采用ST算法来做ST算法的具体做法就是定义dp[i][j]为区间[i,i+2^j-1]里的极值,即从i开始的连续2 ^j个值里的极值容易想到,当区间长度为1时原创 2020-05-27 21:19:36 · 347 阅读 · 0 评论 -
模式串匹配之KMP算法&BM算法&sunday算法
KMP算法解决了这样一个字符串匹配的问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置。这个算法减少了暴力算法中的文本串指针的回溯,每次失配时只回溯模式串p的指针,极大提高了效率//// Created by DongChenglong on 2020/5/13.//#include <cstdio>#include <string>using namespace std;void getnext(int next[], string s) {原创 2020-05-20 20:39:29 · 519 阅读 · 0 评论 -
LeetCode 144. Binary Tree Preorder Traversal
Problem题目链接Solution给定一棵二叉树,输出其先序(preorder)遍历结果。想法有三第一种,递归版本。因为二叉树的遍历定义其实就是一种递归形式的定义,因此很好想到对应代码。但是递归有一个问题,产生的空间复杂度比较高,因为系统栈每次都会把所有变量都临时保存,会产生很多的重复。/** * Definition for a binary tree node. * str...原创 2020-04-06 13:32:34 · 101 阅读 · 0 评论 -
THOJ 范围查询(Range)
DescriptioinLet S be a set of n integral points on the x-axis. For each given interval [a, b], you are asked to count the points lying inside.InputThe first line contains two integers: n (size of S...原创 2020-04-04 22:05:04 · 396 阅读 · 0 评论 -
LeetCode 94. Binary Tree Inorder Traversal
Problem题目链接Notes给定一棵二叉树,使用迭代的方法输出该二叉树的中序遍历结果。迭代的方法就是借助stack来模拟系统堆栈的递归过程,可以先写出递归版本,再根据递归版本来编写迭代版本。Codes递归版本/** * Definition for a binary tree node. * struct TreeNode { * int val; * T...原创 2020-03-31 19:28:19 · 108 阅读 · 0 评论 -
LeetCode 309. Best Time to Buy and Sell Stock with Cooldown
Poblem题目链接Notes此题解法完全参考他人博客。发这篇博文作为自己的一个做题记录。Codesclass Solution {public: int maxProfit(vector<int>& prices) { int n=prices.size(); if(n<=1) return 0; i...原创 2020-03-30 10:34:47 · 97 阅读 · 0 评论 -
LeetCode 188. Best Time to Buy and Sell Stock IV
Problem题目链接Notes买卖股票系列第四题,经过买卖股票第三题的一顿操作之后,其实我们可以得出买卖k次股票的通用解法,但是会有k非常大的测试样例,所以即使我们在第三题里把dp数组降到了长度为k的数组也会爆内存。但仔细一想,因为题目规定买卖不能在同一天,如果k>=n/2,那么买卖k次和买卖无限次是一样的,那就是和该系列的第二题解法一致,而第二题可以用空间复杂度为o(1)的方法解决...原创 2020-03-29 13:55:54 · 99 阅读 · 0 评论 -
LeetCode 11. Container With Most Water
Problem题目链接Notes题意很好理解,容器能盛水的高度取决于左右两边中较短的那一边。我们先考虑左边被固定的情况,那么我们只能移动右边界,开始先把右边界固定在最右边,那么右边界左移的时候,底减少了,那么如果要使左移有意义,那么必须使右边界增高。否则的话底也减少了,高也减少了,面积是肯定减少的。那么上述情况下,我们可以把右边界先固定在左边,然后把右边界右移吗?会发现这时候情况就变得复...原创 2020-03-27 09:56:09 · 216 阅读 · 0 评论 -
LeetCode 123. Best Time to Buy and Sell Stock III
Problem题目链接NotesBest Time to Buy and Sell Stock系列第一题要求的最多一次交易的最大收益,Best Time to Buy and Sell Stock系列第二题要求的无限次交易的最大收益。此题为该系列第三题,要求了交易次数为两次。其实,要求为一次、无限次下,求解很简单。但交易次数为k次(k为>1常数),那么事情就变得困难起来,因为有了次数限...原创 2020-03-26 16:00:53 · 87 阅读 · 0 评论 -
LeetCode 122. Best Time to Buy and Sell Stock II
Problem题目链接Notes这题在121题的基础上,把买卖规则改为了可以多次买卖,不过买第二次时必须要先卖掉第一次,即不能同时进行多笔交易。我们想,即然不能同时多笔交易,那么最后我们得出的解,一定是把原数组分成了若干个不相交的若干个子段,那么要使总的利润最大化,那么我们应该使每段利润都最大,那么我们找到所有非递减的子段,用处于该子段的头的价格买入,尾价格卖出,那么就能得到最大利润了。...原创 2020-03-24 08:57:54 · 101 阅读 · 0 评论 -
LeetCode 121. Best Time to Buy and Sell Stock
Problem题目链接Notes给定一个数组,要你找到数组中num[j]-nums[i]的最大值,其中j>i那么我们在遍历到i时,只需记录下0~i-1里的最小值tempmin,用nums[i]-tempmin,若比现有的差的最大值要大,则更新最大值,在用nums[i]和tempmin比较,看是否更新tempmin。时间复杂度o(n)。Codesclass Solution {...原创 2020-03-23 09:07:04 · 75 阅读 · 0 评论 -
LeetCode 45. Jump Game II
Problem题目链接Notes求index从0到n-1的最小跳数,cases保证有解。一开始想到dp,用dp[i]记录从0跳到i下标的最小跳数。状态转移方程为dp[i+j]=dp[i+j]<dp[i]+1?dp[i+j]:dp[i]+1。该解法超时。查题解的时候发现此题也能有贪心解法,时间复杂度o(n)。贪心法,维护一个常量far记录当前能到的最远下标,若far已经大于等于n-...原创 2020-03-22 14:28:29 · 109 阅读 · 0 评论 -
LeetCode 55. Jump Game
Problem题目链接Notes第一反应是dp题,dp[i]记录是否能从0下标跳到1,能的话赋值为1,否则为0。提交虽然过了,但时间很长。在对第一次的提交做优化时想到,其实第二层循环完全可以不用,因为我们只关心能不能到最后,那么我们在外层循环i时,用一个常量记录,在0~i这个范围内,能跳到最远的下标就行,若i大于了这个常量,则证明0~i范围内跳不到i下标标注的位置,那么肯定也就跳不到最后。...原创 2020-03-21 09:33:31 · 88 阅读 · 0 评论 -
LeetCode 220. Contains Duplicate III
Problem题目链接Notes思路一 自然是纯暴力,两重循环,时间复杂度O(N*K)思路二是在题解里看到的,思路就是维护一个长度为k的窗口,若在这个窗口里有相差小于等于t的两个数,则这两个数两个条件都满足,就能返回true。这个长度为k的窗口每次顺序向右移动1单位。这个窗口可以用map来维护,map的底层实现是用红黑树实现,是有序的并且查找效率高。不过在leetcode上跑出来的时间排名...原创 2020-03-20 21:24:28 · 88 阅读 · 0 评论 -
LeetCode 219. Contains Duplicate II
Problem原题链接Notes题目的意思是,给定一个数组v和一个数字k,让你找到数组v中是否有相同的元素且下标之差绝对值不超过k。利用pair,记录原数组以及下标的对应关系,再进行排序,接着顺序查找即可。Codesclass Solution {public: static bool cmp(pair<int, int>a, pair<int, int&g...原创 2020-03-19 08:41:20 · 98 阅读 · 0 评论 -
LeetCode 217. Contains Duplicate
Problem题目链接Notes题意:给定一个数组,若数组里有重复元素,返回true,否则返回false。思路一想到用set来做,但是效率很低。思路二用快排,徘完序后相同元素必然出现在相邻位置,用顺序遍历即可确定。结果排序比set快很多,搞不清楚为什么。没记错的话,set的查找时间复杂度是logn级别的,快排的平均时间复杂度是nlogn。不太清楚为什么会差这么多,如果有读者知晓,请不吝...原创 2020-03-18 08:55:12 · 92 阅读 · 0 评论 -
LeetCode 275. H-Index II
Problem题目链接Notes这题是274题的一个变体。H-Index的概念和274保持一致,只不过给你的数组从274题的无序数组变成了有序数组。follow up里提示,可以在o(logn)时间里解决此问题。马上想到二分查找。Codesclass Solution {public: int hIndex(vector<int>& citations) {...原创 2020-03-17 10:15:35 · 107 阅读 · 0 评论 -
LeetCode 274. H-Index
Problem题目链接Notes这个题的意思是,给一个具有n个非负数的数组,找出最大的h,使得这个数组中h个元素>=h,剩下的n-h个元素<=h。注意两边都有等号(开始做的时候看漏了一个等号,还感觉题目出错了…)只想到快排顺序查找的方法。时间复杂度就是快排的o(nlogn),空间复杂度o(1)。遍历时的条件,自己写一下样例就明白了。Codesclass Solution ...原创 2020-03-16 17:04:27 · 100 阅读 · 0 评论 -
LeetCode 229. Majority Element II
Problem题目链接Notes这题的要求很明确说需要在时间o(n)空间o(1)的复杂度下完成。与leetcode169题相似,使用变化版的摩尔投票算法解决。首先考虑,如果有出现次数大于n/3的数字,那么这个数组里最多有2个这样的数,那么,我们就把原来摩尔投票算法的一个计数器改为两个计数器,追踪这两个数即可。需特别注意,摩尔投票算法,最后需要判断一下找出的数是否符合要求。Codesc...原创 2020-03-15 11:54:23 · 76 阅读 · 0 评论 -
LeetCode 169. Majority Element
Problem原题链接Notes思路一:用c++中的map来做,用map<int,int>记录数字对应的出现次数。思路二:摩尔投票算法,可以在时间o(n),空间o(1)的开销下找出一个数组中的众数。Codes思路一:class Solution {public: int majorityElement(vector<int>& nums) {...原创 2020-03-15 10:41:13 · 138 阅读 · 1 评论 -
LeetCode 119. Pascal's Triangle II
Problem题目链接Notes与118题一样,也是杨辉三角的题,只不过只需要输出杨辉三角的第k层。Codesclass Solution {public: vector<int> getRow(int rowIndex) { vector<int> pre; for(int i=0;i<=rowIndex;++i)...原创 2020-03-14 09:37:22 · 94 阅读 · 0 评论 -
LeetCode 118. Pascal's Triangle
Problem原题链接Notes给定层数n,输出n层的杨辉三角形。简单的模拟。Codesclass Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int> > ans; for(int i=0;...原创 2020-03-14 09:34:51 · 75 阅读 · 0 评论 -
LeetCode 134. Gas Station
DescriptionThere are N gas stations along a circular route, where the amount of gas at station i is gas[i].You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from statio...原创 2020-03-13 21:46:03 · 176 阅读 · 0 评论 -
LeetCode 299. Bulls and Cows
DescriptionYou are playing the following Bulls and Cows game with your friend: You write down a number and ask your friend to guess what the number is. Each time your friend makes a guess, you provid...原创 2020-03-12 09:44:38 · 190 阅读 · 0 评论 -
LeetCode 41. First Missing Positive
DescriptionGiven an unsorted integer array, find the smallest missing positive integer.Examples1、Input: [1,2,0]Output: 32、Input: [3,4,-1,1]Output: 23、Input: [7,8,9,11,12]Output: 1Your al...原创 2020-03-11 09:41:09 · 124 阅读 · 0 评论 -
LeetCode 189. Rotate Array
DescriptionGiven an array, rotate the array to the right by k steps, where k is non-negative.Examples1、Input: [1,2,3,4,5,6,7] and k = 3Output: [5,6,7,1,2,3,4]Explanation:rotate 1 steps to the ...原创 2020-03-10 12:49:46 · 112 阅读 · 0 评论 -
LeetCode 80. Remove Duplicates from Sorted Array II
DescriptionGiven a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.Do not allocate extra space for another array, you must do...原创 2020-03-09 08:49:41 · 77 阅读 · 0 评论 -
LeetCode 26. Remove Duplicates from Sorted Array
DescriptionGiven a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.Do not allocate extra space for another array, you must do thi...原创 2020-03-08 10:33:37 · 115 阅读 · 0 评论 -
LeetCode 27. Remove Element
DescriptionGiven an array nums and a value val, remove all instances of that value in-place and return the new length.Do not allocate extra space for another array, you must do this by modifying th...原创 2020-03-07 21:52:25 · 115 阅读 · 0 评论