大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
目录
- 一.暴力求解法
- 二.使用额外数组
- 三.原地修改数组
点击查看题目
一.暴力求解法
若我们不考虑时间复杂度,第一想到的方法应该都是暴力求解法吧:遍历数组,如果数组元素=val,用后面的元素将之覆盖。比较简单也不符合题意,就不写代码了
二.使用额外数组
第二种方法不符合题意,但由于能启发第三种方法,所以简单介绍一下
先创建一个元素个数大于或等于nums数组的数组tmp,src和dst分别是数组nums和tmp的下标,初始化都=0,当nums[src]不等于val时,将之拷贝到tmp数组中,拷贝的位置为tmp[dst],再src++,dst++;当nums[src]等于val时,直接src++。
时间复杂度为O(N),空间复杂度为O(N)
三.原地修改数组
创建变量src和dst,它们都是数组nums的下标,初始化都为0,当nums[src]不等于val时,让nums[dst]=nums[src],再src++,dst++,相当于src位置的元素保留;当nums[src]等于val时,直接src++,相当于src位置的元素被移除
int removeElement(int* nums, int numsSize, int val) {int src=0;int dst=0;for(int i=0;i<numsSize;i++){if(nums[src]!=val){nums[dst++]=nums[src++];}else{src++;}} return dst;
}
好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️