一:题目
二:暴力+双指针
1:暴力解法
(1):思路
1.在数组当中 我们想要删除一个元素 得靠覆盖也就是后面的元素往前覆盖其想要删除的元素
但是注意的是我们真实的数组中的元素个数是不变的 因为我们只是将后面的元素移到起前面
并未真正的删除。
2.两层for循环,第一层for循环找到和val相等的元素,并确定其下标,然后更新数组
(2):上码
class Solution {
public:/**思路:1.在数组当中 我们想要删除一个元素 得靠覆盖也就是后面的元素往前覆盖其想要删除的元素但是注意的是我们真实的数组中的元素个数是不变的 因为我们只是将后面的元素移到起前面并未真正的删除。 2.两层for循环,第一层for循环找到和val相等的元素,并确定其下标,然后更新数组*/int removeElement(vector<int>& nums, int val) {int length = nums.size();for(int i = 0; i < length; i++){if(val == nums[i]){for(int j = i; j < length-1; j++){nums[j] = nums[j+1];}length--;//数组中元素少一个所以长度减一i--;///**移除元素 31 2 3 4 5 6 7移完之后的数组1 2 4 5 6 7此时需要i--因为 此时i = 2 那么再经过i++的话i=3 那么访问的元素是5 则把元素4给错过了所以我们需要i--,这样就可以访问到元素4*/}}return length;}
};
2:双指针
(1):思路
1.使用快慢指针 这里的所表示的快指针指的是无论是否找到val 其都正常往后移动 但是慢指针就不是这样了
遇到val 它就不更新了
(2):上码
class Solution {
public:/**思路:1.使用快慢指针 这里的所表示的快指针指的是无论是否找到val 其都正常往后移动 但是慢指针就不是这样了遇到val 它就不更新了*/int removeElement(vector<int>& nums, int val) {int slowIndex = 0;for(int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {if(nums[fastIndex] != val){nums[slowIndex] = nums[fastIndex];slowIndex++;}}return slowIndex;}
};