2018.1.24 看了半天KMP算法没完全搞懂!明天继续
2018-01-24 17:19
211 查看
第一道:
只使用一个if语句将一个整数之前的所有正整数存到一个字符串中,同时,3的倍数改为fizz,5的倍数为buzz,既是3的倍数又是5的倍数存fizz buzz。
说只能使用一个if语句,所以怎么判断是否为3的倍数,5的倍数就成了问题。
(感觉不能用else if吧,要是能用直接判断就好)
想到了用循环,核心思想是,每三次改为fizz,然后用一个if判断是否为5的倍数。
但是在写的过程中发现。。。。。。
while语句有判断的功能啊...
于是:
vector<string> fizzBuzz(int n)
{
vector<string> a(n);
int x=1;
while(x<=n)
{
while(x%3!=0&&x%5!=0&&x<=n)
{
a[x-1]=to_string(x);
x++;
}
while(x%3==0&&x%5==0&&x<=n)
{
a[x-1]="fizz buzz";
x++;
}
while(x%3!=0&&x%5==0&&x<=n)
{
a[x-1]="buzz";
x++;
}
while(x%3==0&&x%5!=0&&x<=n)
{
a[x-1]="fizz";
x++;
}
}
return a;
}
感觉有点..投机取巧?,提交了 AC了...
第二道:
从一个字符串中找另一个字符串,找到了返回1,没找到返回-1.
挑战说O(n^2)是可接受的,但是可以O(n)吗,还提示KMP算法....
先写一个暴力的: int strStr(const char *s, const char *p) {
if(s==NULL)
return -1;
if(p==NULL)
return -1;
int sLen = strlen(s);
int pLen = strlen(p);
int i = 0;
int j = 0;
while (i < sLen && j < pLen)
{
if (s[i] == p[j])
{
i++;
j++;
}
else
{
i = i - j + 1;
j = 0;
}
}
if (j == pLen)
return i-j;
else
return -1;
}
提交了,AC了.
然后去看了KMP算法...
花了不少时间了解了算法,但是关于算法中next数组的求法还不是很熟悉。
由于时间不够,匆忙之中写下博客,明天继续..
争取完成时间复杂度O(n)的
ps:了解后KMP算法的时间复杂度其实是O(m+n).......
只使用一个if语句将一个整数之前的所有正整数存到一个字符串中,同时,3的倍数改为fizz,5的倍数为buzz,既是3的倍数又是5的倍数存fizz buzz。
说只能使用一个if语句,所以怎么判断是否为3的倍数,5的倍数就成了问题。
(感觉不能用else if吧,要是能用直接判断就好)
想到了用循环,核心思想是,每三次改为fizz,然后用一个if判断是否为5的倍数。
但是在写的过程中发现。。。。。。
while语句有判断的功能啊...
于是:
vector<string> fizzBuzz(int n)
{
vector<string> a(n);
int x=1;
while(x<=n)
{
while(x%3!=0&&x%5!=0&&x<=n)
{
a[x-1]=to_string(x);
x++;
}
while(x%3==0&&x%5==0&&x<=n)
{
a[x-1]="fizz buzz";
x++;
}
while(x%3!=0&&x%5==0&&x<=n)
{
a[x-1]="buzz";
x++;
}
while(x%3==0&&x%5!=0&&x<=n)
{
a[x-1]="fizz";
x++;
}
}
return a;
}
感觉有点..投机取巧?,提交了 AC了...
第二道:
从一个字符串中找另一个字符串,找到了返回1,没找到返回-1.
挑战说O(n^2)是可接受的,但是可以O(n)吗,还提示KMP算法....
先写一个暴力的: int strStr(const char *s, const char *p) {
if(s==NULL)
return -1;
if(p==NULL)
return -1;
int sLen = strlen(s);
int pLen = strlen(p);
int i = 0;
int j = 0;
while (i < sLen && j < pLen)
{
if (s[i] == p[j])
{
i++;
j++;
}
else
{
i = i - j + 1;
j = 0;
}
}
if (j == pLen)
return i-j;
else
return -1;
}
提交了,AC了.
然后去看了KMP算法...
花了不少时间了解了算法,但是关于算法中next数组的求法还不是很熟悉。
由于时间不够,匆忙之中写下博客,明天继续..
争取完成时间复杂度O(n)的
ps:了解后KMP算法的时间复杂度其实是O(m+n).......
相关文章推荐
- 完全搞懂KMP算法
- 完全搞懂傅里叶变换和小波(4)——欧拉公式及其证明
- 今天效率很低, 明天继续
- [导入]明天回南京,继续工作
- 完全搞懂傅里叶变换和小波(5)——傅立叶级数展开之函数项级数的概念
- VOA听力,明天继续努力
- 明天继续二辩
- mysql 存储引擎 innodb 学习复习 之 事务(未完明天继续)
- 完全搞懂傅里叶变换和小波(5)——傅立叶级数展开之函数项级数的概念
- 完全搞懂傅里叶变换和小波(3)——泰勒公式及其证明
- 完全搞懂傅里叶变换和小波(2)——三个中值定理
- 完全搞懂傅里叶变换和小波(6)――傅立叶级数展开之函数项级数的性质
- 完全搞懂傅里叶变换和小波(6)——傅立叶级数展开之函数项级数的性质
- 明天继续上班
- 完全搞懂傅里叶变换和小波(6)——傅立叶级数展开之函数项级数的性质
- 完全搞懂傅里叶变换和小波(1)——总纲
- 今天累了,明天接着研究打印技术,直到完全掌握为止
- 完全搞懂傅里叶变换和小波(6)——傅立叶级数展开之函数项级数的性质
- 2014年主流手机对比(明天继续&hellip;&hellip;)
- 明天继续