funcremoveElement(nums []int, val int)int { len := len(nums); for i := 0 ; i < len ;i++{ if(nums[i] == val){ for j := i+1 ;j < len ; j++{ nums[j-1] = nums[j]; } len--; i--; } } returnlen; }
双指针法(快慢指针法)
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针
快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
慢指针:指向更新 新数组下标的位置
1 2 3 4 5 6 7 8 9 10 11 12
classSolution { //用后面来覆盖前面,集体向前移一位 publicintremoveElement(int[] nums, int val) { intslow=0; for(intfast=0 ; fast < nums.length; fast++){ if(nums[fast] != val ){ nums[slow++] = nums[fast]; //先赋值再++ } } return slow; } }
1 2 3 4 5 6 7 8 9 10
funcremoveElement(nums []int, val int)int { slow := 0 for fast := 0 ; fast <len(nums);fast++{ if(nums[fast] != val){ nums[slow]=nums[fast] slow++ } } return slow; }
funcremoveElement(nums []int, val int)int { left := 0 right := len(nums) -1 for left <= right{ for left <= right &&nums[left]!= val{ left++ } for left <= right && nums[right] == val{ right-- } if left < right{ nums[left] = nums[right] left++ right-- } } return left