题目:https://leetcode-cn.com/problems/remove-element/

思路:

这道题要求输出正确数组长度及值,所以不能强行把目标值改为0什么的,只返回长度。
必须要移除(覆盖)掉目标值。

解法一:暴力解法

这个题目暴力的解法就是两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组。

解法二:双指针法

双指针法(快慢指针法):
通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
在数组里是用两个整型值代表下标,在链表里是两个指针,一般能实现O(n)的时间解决问题,两个指针的位置一般在第一个元素和第二个元素或者第一个元素和最后一个元素,快指针在前“探路”,当符合某种条件时慢指针向前挪

  1. int removeElement(vector<int>& nums, int val) {
  2. int slow =0;//慢指针
  3. //int fast =0;//快指针
  4. for(int fast =0;fast<nums.size();fast++){
  5. if(nums[fast] != val){
  6. nums[slow++] =nums[fast]; //把slow++写在里面,代码更简洁
  7. }
  8. }
  9. return slow;
  10. }

js:用splice删除元素

  1. var removeElement = function(nums, val) {
  2. for(let i =0;i<nums.length;i++){
  3. if(nums[i] ===val){
  4. nums.splice(i,1)
  5. i--
  6. }
  7. }
  8. return nums.length
  9. };