leetcode:Remove Element +  Imple…

来源:互联网 发布:睡了兄弟的女朋友知乎 编辑:程序博客网 时间:2024/07/13 10:42
Remove Element:
题意主要是给定一个字符串及一个值val,在不使用额外空间的条件下,把所有等于val的值去掉(放在数组最末位),返回更新后的数组长度。

我的思路很简单,遍历一次数组,每当遇到等于val的数值时,就以此的下一个为起点往后遍历,找到第一个不等于val的值,交换即可。

看了大神的思路,才意识到,直接寻找不相等的值来替换之前寻到的val,速度会快很多,程序也很简洁:
    int cnt = 0;
    for(int i = 0 ; i <nums.size() ; ++i) {
       if(nums[i] == val)
          cnt++;
       else
          nums[i-cnt] = nums[i];
    }
    returnnums.size()-cnt;



Implement strStr()
不得不说自己真要复习了,连经典的KMP算法都记不清了。。
算法本身不说,说说几个细节问题:
1、leetcode和主流的IDE还是有一定差别的,有些编译错误,在leetcode上居然显示为Runtimeerror......
比如:一时忘了C++是不允许用变量初始化数组:int a[b]; //错误!。因为编译器无法得知变量值
可以用new来动态分配,如:int *next=new int[needle.size()];

2、形成next数组的那个循环到size()-1终止即可,最后一个字符对应的next数组值已经在循环内部产生了

3、记得加入判断语句,if(needle[j]==needle[k]),这样可以提高KMP的效率。

4、这一点也是今天被坑的最多的一点,string.size()返回值是unsigned,所以如果用j
阅读全文
0 0