当前位置:   article > 正文

数组删除元素

数组删除元素

在数组中删除值为val的元素,因为数组在内存中是连续存储,所以不能只删除元素,而是在删除元素后还要使后边元素前移。

在数组中删除元素有两种方法:

(1)暴力解法

(2)双指针法

1.暴力解法

暴力解法就是通过两层循环,一个for循环遍历数组,一个for循环在删除后更新数组。实现代码如下:

  1. //移除元素
  2. //Solution1 --暴力求解
  3. int removeElement(vector<int>& nums, int val){
  4. int l = nums.size();
  5. for (int i = 0; i<l; i++){
  6. if (nums[i] == val) {
  7. for (int j = i+1; j<l; j++) {
  8. nums[j-1] = nums[j];
  9. }
  10. i --;
  11. l--;
  12. }
  13. }
  14. return l;
  15. }

暴力解法时间复杂度为O(n^2),空间复杂度为O(1)。

2.双指针法(快慢指针法)

双指针法是通过一个快指针和一个慢指针在一个for循环下完成两个for循环的工作。

  1. //Solution2 --双指针法
  2. int removeElement(vector<int>& nums, int val) {
  3. int slowIndex = 0;
  4. for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {
  5. if (val != nums[fastIndex]) {
  6. nums[slowIndex++] = nums[fastIndex];
  7. }
  8. }
  9. return slowIndex;
  10. }

双指针法时间复杂度为O(logn),空间复杂度为O(1)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/757543
推荐阅读
相关标签
  

闽ICP备14008679号