ac
bb67ao
这个作者很懒,什么都没留下…
展开
-
剑指offer替换空格,双指针
双指针其实就是用两个变量进行标记,在这里,i标记原始数组的尾指针,j标记扩增后的尾指针。这里关键要计算清楚扩增后数组容量,这样倒序插入,原数组与更改后数组不会重叠,重叠时即为不再有空格的时候。 class Solution { public: string replaceSpaces(string &str){ int len=0; for(auto...原创 2020-01-15 20:20:39 · 133 阅读 · 0 评论 -
剑指offer不改变数组求解重复数字
剑指offer上给出的nlogn算法,根据抽屉原理:n个苹果放在n-1个抽屉里,必有一个抽屉里放有两个苹果。如果对每个数字进行遍历,则复杂度为n^2,这里采用二分。 对每个区间的数字进行装苹果,每当苹果树大于抽屉数,即为重复数字所在区间。继续二分,直到找到重复数字。 class Solution { public: int duplicateInArray(vector<int>...原创 2020-01-15 19:56:33 · 110 阅读 · 0 评论 -
剑指offer找重复数字
题意要求得出时间复杂度为1的程序,通常所作的桶排序类似方法自然不对。采用对号入座的方式,注意题意为n个数字,每个数字都在n范围内,故,只有重复的数字所在的位置占用两遍,当对当下数字进行对号入座的时候,如果座位上已有序号相同的数字,即为重复数字。 class Solution { public: int duplicateInArray(vector<int>& nums...原创 2020-01-15 19:17:02 · 136 阅读 · 0 评论 -
hdu1686 && hdu2087 && kmp
这两道题放在一起呢,因为我觉得他有一些相似之处。先看1686 hdu1686: 这道题是让求模式串在文本串中出现的次数,好比ABABA,其中ABA出现了两次。也就是说用过的数字可以再用。所以当模式串匹配过一轮后,我们应该跳转到next[len]的位置来继续匹配,而不是从头开始匹配。 int kmp(char s1[],char s2[]){ int i=0,j=0,ans=...原创 2019-10-18 15:49:39 · 119 阅读 · 0 评论 -
AcWing 89. a^b
传送门 这道题是用来降低时间复杂度的,曾经还不知道这个算法的时候还以为是可以进行大数运算。 当然是不可以的。至于怎么进行大数阶乘有机会再研究。 我们先考虑一下朴素做法的时间复杂度应该是O(n),而题目的数据范围是10^9,对于c++来说,每秒钟大概能算10^7-10^8次,所以一定会超时。 那么我们就来看这种快速幂算法: int power(int a,int b,int p){ ...原创 2019-10-09 13:41:19 · 108 阅读 · 0 评论 -
AcWing 92. 递归实现指数型枚举
传送门 这道题,反正大佬都说是水题,题解是很好写的。但是我硬是看了好久才明白一丝丝 #include<iostream> #include<vector> using namespace std; int n=0; vector<int > num; void dfs(int k){ if(k==n+1){ for(int i...原创 2019-10-09 21:00:14 · 167 阅读 · 0 评论